DataTable分组计算机功能

wwwiii520 2009-02-19 04:37:37
DataTable中有以下数据
1 a 30
2 a 34
3 b 33
4 b 33
5 a 343
. ....
......
......
想得到的结果是
a 总和
b 总和
也就是一个分组计算机功能
有什么好的解决方案,大家多多指教!
...全文
463 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
我姓区不姓区 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wwwiii520 的回复:]
不行的.
又不是只有a 和 b 後面還有很多行咧.有c .d .e .f......
[/Quote]

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("C1", typeof(int)));
dt.Columns.Add(new DataColumn("C2", typeof(string)));
dt.Columns.Add(new DataColumn("C3", typeof(int)));
dt.Rows.Add(1, "a", 30);
dt.Rows.Add(2, "a", 40);
dt.Rows.Add(3, "b", 50);
dt.Rows.Add(4, "b", 60);
dt.Rows.Add(5, "c", 70);
dt.Rows.Add(6, "c", 80);
dt.Rows.Add(7, "d", 90);
List<string> list = new List<string>();
foreach (DataRow dr in dt.Rows)
{
if (!list.Contains(dr["C2"].ToString()))
{
Console.WriteLine(dr["C2"] + "总和:" + dt.Compute("sum(C3)", "C2='" + dr["C2"] + "'"));
list.Add(dr["C2"].ToString());
}
}
sprc_lcl 2009-02-19
  • 打赏
  • 举报
回复
object objSum = dt.Compute("sum(字段3)", "字段2='a'");
前提是知道a这个值,所以还是得循环

DataView dv = dt.DefaultView; 
dv.Sort = "字段2 asc";
string tempstr = "";
for(int i=0;i <dv.Count;i++)
{
if(tempstr != dv[i]["字段2"].ToString())
{
tempstr = dv[i]["字段2"].ToString();
//保存或打印tempstr和dt.Compute("sum(字段3)", "字段2='"+tempstr+"'");
}
}
wwwiii520 2009-02-19
  • 打赏
  • 举报
回复
不行的.
又不是只有a 和 b 後面還有很多行咧.有c .d .e .f......
Cherishny 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ojlovecd 的回复:]
C# code
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("C1", typeof(int)));
dt.Columns.Add(new DataColumn("C2", typeof(string)));
dt.Columns.Add(new DataColumn("C3", typeof(int)));
dt.Rows.Add(1, "a", 30);
dt.Rows.Add(2, "a", 40);
dt.Rows.Add(3, "b", 50);
dt.Rows.Add(4, "b", 60)…
[/Quote]
正解
lovehongyun 2009-02-19
  • 打赏
  • 举报
回复
参考10楼
我姓区不姓区 2009-02-19
  • 打赏
  • 举报
回复

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("C1", typeof(int)));
dt.Columns.Add(new DataColumn("C2", typeof(string)));
dt.Columns.Add(new DataColumn("C3", typeof(int)));
dt.Rows.Add(1, "a", 30);
dt.Rows.Add(2, "a", 40);
dt.Rows.Add(3, "b", 50);
dt.Rows.Add(4, "b", 60);
dt.Rows.Add(5, "a", 70);
Console.WriteLine("a总和:" + dt.Compute("sum(C3)", "C2='a'"));
Console.WriteLine("b总和:" + dt.Compute("sum(C3)", "C2='b'"));
/*
输出:
a总和:140
b总和:110
*/
che2piaopiao 2009-02-19
  • 打赏
  • 举报
回复
用Hashtable
cppfaq 2009-02-19
  • 打赏
  • 举报
回复
看来总归是跳不过一个循环然后Datatable。Comute?
zgke 2009-02-19
  • 打赏
  • 举报
回复
object _ValueCountA = _Table.Compute("Sum(数字列名)","名字='A'");
object _ValueCountB = _Table.Compute("Sum(数字列名)", "名字='B'");

你可以这样用TABLE
sprc_lcl 2009-02-19
  • 打赏
  • 举报
回复
object objSum = dt.Compute("sum(字段3)", "字段2='a'");
前提是知道a这个值,所以还是得循环
DataView dv = dt.DefaultView;
dv.Sort = "字段2 asc";
string tempstr = "";
for(int i=0;i<dv.Count;i++)
{
if(tempstr != dv[i]["字段2"].ToString())
{
tempstr = dv[i]["字段2"].ToString();
//保存tempstr和dt.Compute("sum(字段3)", "字段2='"+tempstr+"'");
}
}
wwwiii520 2009-02-19
  • 打赏
  • 举报
回复
北京的雾霾天 2009-02-19
  • 打赏
  • 举报
回复
DataTable本身没有这样的功能,你需要自己做个循环处理数据。可以把结果放到别一个DataTable中。
wwwiii520 2009-02-19
  • 打赏
  • 举报
回复
在內存表DataTable中處理啊...
SQL語句都會寫的吧
fanxin1126 2009-02-19
  • 打赏
  • 举报
回复
SQL 的话前提是你从数据库查出来了,要不就用循环加!
fanxin1126 2009-02-19
  • 打赏
  • 举报
回复
SQL SELECT sUM(A那一列的名字) GROUP BY A那一列的名字 HAVING COUNT(A那一列的名字)>1

110,561

社区成员

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

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

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