datatable行转列问题

jianglai11 2009-06-03 02:25:18
求一个方法。对datatable进行行专列的
public datatable convertRow2Column(datatable dt,string columnName)
对指定列columnName的列中的非重复的值转换成列。如下

id name type
1 1 1
1 1 2
2 2 2

转换为
id name type1 type2
1 1 1 2
2 2 0 2
只用c#
...全文
633 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
johnnyshieh 2011-01-20
  • 打赏
  • 举报
回复

好贴,正需要
rnmmdb 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guohouchang1 的回复:]
C# code

DataTable _Table=new DataTable();
_Table.Columns.Add("ID");
_Table.Columns.Add("Name");
_Table.Columns.Add("Age");
_Table.Columns.Add("Mail¡­
[/Quote]
支持!
luafie 2009-06-03
  • 打赏
  • 举报
回复
帮顶。
surlew 2009-06-03
  • 打赏
  • 举报
回复
sql实现

if not object_id('tab1') is null
drop table tab1
Go
Create table tab1([id] int,[name] int,[type] int)
Insert tab1
select 1,1,1 union all
select 1,1,2 union all
select 2,2,2
Go

declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([type])+'=max(case when [type]='+quotename([type],'''')+' then [type] else 0 end)'
from tab1 group by[type]
exec('select [id],[name]'+@s+' from tab1 group by [id],[name]')
qgylovelj 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guohouchang1 的回复:]
C# code

DataTable _Table =new DataTable();
_Table.Columns.Add("ID");
_Table.Columns.Add("Name");
_Table.Columns.Add("Age");
_Table.Columns.Add("Mail");

_Table.Rows.Add(new object[]{"1","张三","100","zhangsan@qq.com"});
_Table.Rows.Add(new object[]{"2","test","100","teste2@qq.com"});
_Table.Rows…
[/Quote]
参考
guohouchang1 2009-06-03
  • 打赏
  • 举报
回复


DataTable _Table =new DataTable();
_Table.Columns.Add("ID");
_Table.Columns.Add("Name");
_Table.Columns.Add("Age");
_Table.Columns.Add("Mail");

_Table.Rows.Add(new object[]{"1","张三","100","zhangsan@qq.com"});
_Table.Rows.Add(new object[]{"2","test","100","teste2@qq.com"});
_Table.Rows.Add(new object[]{"3","test1","100","test1@qq.com"});

dataGridView1.DataSource = GetReverseTable(_Table);


public DataTable GetReverseTable(DataTable p_Table)
{
DataTable _Table = new DataTable();
for (int i = 0; i != p_Table.Rows.Count + 1; i++)
{
_Table.Columns.Add("Column"+i.ToString());
}

for (int i = 0; i != p_Table.Columns.Count; i++)
{
object[] _ObjectValue = new object[p_Table.Rows.Count + 1];
_ObjectValue[0] = p_Table.Columns[i].ColumnName;
for (int z = 0; z != p_Table.Rows.Count; z++)
{
_ObjectValue[z + 1] = p_Table.Rows[z][i];
}
_Table.Rows.Add(_ObjectValue);
}
return _Table;
}
zhaigates 2009-06-03
  • 打赏
  • 举报
回复
创建一个新的newTable
包含所有的字段
然后从第一个dataTable中进行遍历
如果newTable没有找到相同的关键字id
那么添加一行,并赋值
如果有相同的关键字id
那么对某个元素赋值

zhaigates 2009-06-03
  • 打赏
  • 举报
回复
type多少固定么
surlew 2009-06-03
  • 打赏
  • 举报
回复
说下思路吧,select distinct type from table 查出唯一的type

循环将查出来的type 加在id name 的后面 对应的取到行的值

jianglai11 2009-06-03
  • 打赏
  • 举报
回复
真快。。。

110,579

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧