计算datatable数据
之前的逻辑就不说了id name age money
1 张一 10 10
2 张二 15 20
3 张三 20 30
4 张四 18 40
5 张五 25 50
怎么计算最后2条数据的和
最后得出来的table,并且修改name 不知道有没这个功能
id name age money
1 张一 10 10
2 张二 15 20
3 张三 20 30
4 其他 43 90
之前的逻辑就不说了id name age money
1 张一 10 10
2 张二 15 20
3 张三 20 30
4 张四 18 40
5 张五 25 50
怎么计算最后2条数据的和
最后得出来的table,并且修改name 不知道有没这个功能
id name age money
1 张一 10 10
2 张二 15 20
3 张三 20 30
4 其他 43 90
解决方案 »
- 超链接中有“#”的文件下载 #该怎么转换
- 我的radiobuttonlist和checkboxlist动态绑定了数据。提交的时候如果没选怎么提示选项不可以为空?
- C#中SOCKET通信如何实现字体信息的通信
- 安装XP-SP2的奇怪问题??????
- JMAIL收邮件问题,已经可以收邮件了,但是在收完一次且delete之后,再去收,为什么收到的还是第一次收的呢(注:在delete之后,我也disco
- 为何Thread.Abort()造成程序冻结数秒,该怎避免?
- Windows 服务程序 引入User32.DLL无效问题
- 求用户权限管理控制代码
- 当一个字段为空的时候显示指定的几个字,该如何写
- 请教:如何在代码中操作Web项目中的代码。
- propertygrid展开struct类型的问题
- 关于SocketAsyncEventArgs的问题
dt2.Clear();
int age = 0;
int money = 0;
for (int i = 0; i < dt1.Rows.Count; i++)
{
if (i < 3)
dt2.Rows.Add(dt1.Rows[i]);
else {
age += int.Parse(dt1.Rows[i]["age"].ToString());
money += int.Parse(dt1.Rows[i]["money"].ToString());
}
} DataRow dr2 = dt2.NewRow();
dr2["id"] = 4;
dr2["name"] = "其它";
dr2["age"] = age;
dr2["money"] = money; dt2.Rows.Add(dr2);
这个就交给SQL DECLARE @table TABLE(id int,name varchar(10),age int,[money] int)
INSERT INTO @table
SELECT 1,'张一',10,10 UNION ALL
SELECT 2,'张二',15,20 UNION ALL
SELECT 3,'张三',20,30 UNION ALL
SELECT 4,'张四',18,40 UNION ALL
SELECT 5,'张五',25,50SELECT T.ID,T.Name,SUM(age) Age,SUM([money]) [Money]
FROM(
SELECT CASE WHEN id IN(1,2,3) THEN id ELSE 4 END [ID],
CASE WHEN id IN(1,2,3) THEN Name ELSE '其他' END [Name],
age,[money]
FROM @table
) T
GROUP BY T.ID,T.Name
ORDER BY ID/*
(5 行受影响)
ID Name Age Money
----------- ---------- ----------- -----------
1 张一 10 10
2 张二 15 20
3 张三 20 30
4 其他 43 90(4 行受影响)
*/
var result= dt.AsEnumerable().Where((a, index) => index >= dt.Rows.Count - 2).CopyToDataTable<DataRow>();
dt = dt.AsEnumerable().Where((a, index) => index < dt.Rows.Count - 2).CopyToDataTable<DataRow>();
DataRow dr = dt.NewRow();
dr["ID"] = dt.AsEnumerable().Last().Field<int>("ID") + 1;
dr["name"] = "其他";
dr["age"] = result.Compute("sum(age)",null);
dr["money"] = result.Compute("sum(money)", null); ;
dt.Rows.Add(dr); //此时dt已符合要求
UNION
select 4 as id,'其他',sum(age),sum(money) from table1 where id >= 4
var result= dt.AsEnumerable().Where((a, index) => index >= dt.Rows.Count - 2).CopyToDataTable<DataRow>();这句没看懂 能否标明下 dt.AsEnumerable() 貌似报错的
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("age", typeof(int));
dt.Columns.Add("money", typeof(int));
dt.Rows.Add(1, "张一", 10, 10);
dt.Rows.Add(2, "张二", 15, 20);
dt.Rows.Add(3, "张三", 20, 30);
dt.Rows.Add(4, "张四", 18, 40);
dt.Rows.Add(5, "张五", 25, 50);
int ageSum = (int)dt.Rows[dt.Rows.Count - 2]["age"] + (int)dt.Rows[dt.Rows.Count - 1]["age"];
int moneySum = (int)dt.Rows[dt.Rows.Count - 2]["money"] + (int)dt.Rows[dt.Rows.Count - 1]["money"];
dt.Rows.RemoveAt(dt.Rows.Count - 1);
dt.Rows[dt.Rows.Count - 1]["name"] = "其他";
dt.Rows[dt.Rows.Count - 1]["age"] = ageSum;
dt.Rows[dt.Rows.Count - 1]["money"] = moneySum;
经过最后6句处理后的DataTable就是你要的。