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
然后,
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];
}
}