日期:2014-05-18  浏览次数:20425 次

DATATABLE 行转列的,求救
DataTable1   数据集查询结果如下

year           A       B       C

2001           1       2       3
2002           3       4       5
2003           4       3       3

需要重新生成一数据集DataTable2,结果如下

year         2001       2002       2003
A             1             3             4
B             2             4             3
C             3             5             3


请问,如何创建DATATABLE2   ,从而把dataTable1   数据集进行行转列操作。

------解决方案--------------------
year 的值是否有重复?
------解决方案--------------------
这个问题做过,
只是现在不记得了,
给我发邮件晚上回家给你
邮箱:ilrfn@163.com
------解决方案--------------------
帮顶
------解决方案--------------------
--给你一个数据库处理的方法。
--SQL Server 2005

--测试环境

declare @t table( year1 int, a varchar(10), b varchar(10), c varchar(10))
insert into @t select 2001,1,2,3
union all select 2002,3,4,5
union all select 2003,4,3,3

--测试语句
SELECT * FROM
(
SELECT YEAR,year1,Orders
FROM
(SELECT year1, a, b, c
FROM @t) p
UNPIVOT
(Orders FOR year IN
(a, b, c)
)AS unpvt
) T
PIVOT
(MAX(ORDERS)
for year1 in ([2001],[2002],[2003])
)as pt

--结果
/*
YEAR 2001 2002 2003
----- ------ ----- --------
a 1 3 4
b 2 4 3
c 3 5 3
*/
------解决方案--------------------

假如没有,

DataTable dt2 = new DataTable();
dt2.Columns.Add( "year ", typeof(string));
foreach(DataRow row in dt1.Rows) {
dt2.Columns.Add(row[ "year "].ToString(), typeof(int));
}

假如有, ->
如何对 DataTable 执行 SELECT DISTINCT
http://www.cnblogs.com/Jinglecat/archive/2007/07/16/820339.html


然后,

DataRow row;
string colName1;
for(int i=1; i < dt1.Columns.Count; i++) {
row = dt2.NewRow();
colName1 = dt1.Columns[i].ColumnName;
row[ "year "] = colName1;
for(int j=1; j < dt2.Columns.Count; j++) {
row[j] = dt2.Select( "year= " + dt2.Columns[j].ColumnName)[0][colName1];
}
}