关于DataTable某一列等于这一列上面所有行的和,结帖率 100%
DataTable某一列等于这一列上面所有行的和,任意一列都是这样,就是第三行第二列等于第一行第二列加上第二行第二列的和 第N行第二列等于第N-1行第二列加上第N-2行第二列的和
不知道有没有表达式,如果没有,只能程序里面相加了,感觉那样麻烦
[解决办法]
select *,
sumnum=( select isnull(sum(num),0) from tb where id<=t.id)
from tb t
sumnum是num的求和 结果如下:
id num sumnum
122
21416
31127
4231258
511269
[解决办法]
假定你的datatable 只存在一列,然后获得要计算到的行,我设定为第6行,这个你可以自行改变
public static DataTable GetTable(DataTable dt) { DataRow dataRow = dt.NewRow(); int result = 0; foreach (DataRow row in dt.Rows) { result += int.Parse(row["number"].ToString()); } dataRow["number"] = result; dt.Rows.Add(dataRow); if (dt.Rows.Count == 6) { return dt; } else { return GetTable(dt); } }
[解决办法]
那不是一个循环就可以了?就2行代码:
DataTable dt = new DataTable(); dt.Columns.Add("id", typeof(int)); dt.Columns.Add("sum", typeof(int)); dt.Rows.Add(1, 2); dt.Rows.Add(2, 3); dt.Rows.Add(3, 4); dt.Rows.Add(4, 5); for (int i = 1; i < dt.Rows.Count; i++) dt.Rows[i]["sum"] = (int)dt.Rows[i - 1]["sum"] + (int)dt.Rows[i]["sum"];
[解决办法]
DataTable dt = new DataTable(); dt.Columns.Add("id", typeof(int)); dt.Columns.Add("sum", typeof(int)); dt.Rows.Add(1, 2); dt.Rows.Add(2, 3); dt.Rows.Add(3, 4); dt.Rows.Add(4, 5); dt = dt.AsEnumerable().Select(a => { DataRow dr = dt.NewRow(); object o = dt.Compute("sum(sum)", "id<=" + a.Field<int>("id")); int sum=0; int.TryParse(o.ToString(),out sum); dr["id"] = a.Field<int>("id"); dr["sum"] = sum; return dr; }).CopyToDataTable<DataRow>(); //此时 DataTable数据如下 /* id sum 1 2 2 5 3 9 4 14 */