站点 时 要素1 要素2
A 20:00 3 4
A 21:00 5 6
A 22:00 7 8
B 20:00 9 10
B 21:00 11 12站点 要素 20:00 21:00 22:00
A 要素1 3 5 7
A 要素2 4 6 8
B 要素1 9 11
B 要素2 10 12 把第一个表转成第二个表的形式
有什么好的方法
A 20:00 3 4
A 21:00 5 6
A 22:00 7 8
B 20:00 9 10
B 21:00 11 12站点 要素 20:00 21:00 22:00
A 要素1 3 5 7
A 要素2 4 6 8
B 要素1 9 11
B 要素2 10 12 把第一个表转成第二个表的形式
有什么好的方法
A 20:00 3 4
A 21:00 5 6
A 22:00 7 8
B 20:00 9 10
B 21:00 11 12站点 要素 20:00 21:00 22:00
A 要素1 3 5 7
A 要素2 4 6 8
B 要素1 9 11
B 要素2 10 12
fname ftype fvalue
小乔 zaocan 10
小乔 zhongcan 20
小乔 wancan 5
转换后的表结构:
fname zaocan_value zhongcan_value wancan_value
小乔 10 20 5 纵表转横表SQL示例:
Sql代码
select Fname,
sum(case Ftype
when 'zaocan' then
Fvalue
else
0
end) as zaocan_value,
sum(case Ftype
when 'zhongcan' then
Fvalue
else
0
end) as zhongcan_value,
sum(case Ftype
when 'wancan' then
Fvalue
else
0
end) as wancan_value
from case_table
group by Fname
{
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("type");
dt.Columns.Add("relt"); for (int i = 0; i < 4; i++)
{
DataRow dr = dt.NewRow();
dr["name"] = "name" + i;
dr["type"] = "type" + i;
dr["relt"] = "relt" + i; dt.Rows.Add(dr);
} DisplayTable(dt); Console.WriteLine("\r\n =====> 进行行列转换 \r\n"); DisplayTable(ColumnToRow(dt, 0)); Console.ReadLine();
} public static DataTable ColumnToRow(DataTable src_dt, int columnIndex) //columnIndex 用来当作新列名的列
{
DataTable dt = new DataTable();
dt.Columns.Add(src_dt.Columns[columnIndex].ColumnName); foreach (DataRow dr in src_dt.Rows)
dt.Columns.Add(dr[columnIndex].ToString()); int n = src_dt.Columns.Count;
for (int i = 0; i < n; i++)
{
if (i == columnIndex) continue; //如果是被当作列名的列,则跳过 DataRow new_dr = dt.NewRow();
string columnName = src_dt.Columns[i].ColumnName;
new_dr[0] = columnName; foreach (DataRow dr in src_dt.Rows)
{
string newColumnName = dr[columnIndex].ToString();
new_dr[newColumnName] = dr[columnName];
} dt.Rows.Add(new_dr);
} return dt;
}