如何将多列转换为一列 [英] How to transpose multiple columns into one column

查看:110
本文介绍了如何将多列转换为一列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我在将多个列转换为包含多行的单个列时遇到了一个问题。下面是C#中预期的问题结构和输出。



输入数据表



PersonId代码1代码2代码3文本1文本2文本3 LOC 1 LOC 2 LOC 3

1 CD1 CD2 CD3 TE1 TE2 TE3 LO1 LO2 LO3





输出数据表



PersonId代码文本LOC

1 CD1 TE1 LO1

1 CD2 TE2 LO2

1 CD3 TE3 LO3



我找不到任何能解决类似问题的文章。



我尝试了什么:



我尝试使用for循环,但for循环正在嵌套。



在一个for循环中有3个循环用于3列。



我们可以制作一些泛型方法?

Hi,

I am facing one problem in transposing multiple columns into a single column with multiple rows. Below is the problem structure and output expected in C#.

Input DataTable

PersonId Code 1 Code 2 Code 3 Text 1 Text 2 Text 3 LOC 1 LOC 2 LOC 3
1 CD1 CD2 CD3 TE1 TE2 TE3 LO1 LO2 LO3


OUTPUT DataTable

PersonId Code Text LOC
1 CD1 TE1 LO1
1 CD2 TE2 LO2
1 CD3 TE3 LO3

I couldn't find any article which is giving solution for similar problem.

What I have tried:

I tried using for loop but for loops are getting nested.

Inside one for loop there are 3 for loops for 3 columns.

Can we make some generic method ?

推荐答案

可以使用单个循环(然后需要少量代码重复)或两个嵌套循环来执行此操作:



It's possible to do this with either a single loop (which then would require a small amount of code repetition) or two nested loops:

DataTable outputTable = inputTable.Clone(); // copies the schema (columns)
// todo: remove the columns Code2, Code3, Text2, etc. from outputTable
foreach(DataRow inputRow in inputTable.Rows)
{
    for (int i=0; i<3; i++)
    {
        DataRow newRow = outputTable.NewRow();
        newRow[0] = inputRow[0];
        newRow[1] = inputRow[1 + i];
        newRow[2] = inputRow[4 + i];
        newRow[3] = inputRow[7 + i];
        outputTable.Rows.Add(newRow);
    }
}


这篇关于如何将多列转换为一列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆