读书人

关于DataTable某一列等于这一列下面所

发布时间: 2012-09-10 11:02:32 作者: rapoo

关于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行,这个你可以自行改变

C# code
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行代码:
C# code
        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"];
[解决办法]
探讨

select *,
sumid=( select isnull(sum(num),0) from tb where id<t.id)

from tb t


SQL查义时绑定好不是更好
id num sumid
120
2142
31116
423127
511258

[解决办法]
http://msdn.microsoft.com/zh-cn/library/system.data.datacolumn.expression(v=vs.80).aspx
[解决办法]
其实11楼,翻译下来如下,linq
C# code
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             */ 

读书人网 >asp.net

热点推荐