计算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

解决方案 »

  1.   

    先取出来数据用,2条row保存 然后在 计算好 保存到 row中..删除数据库中的 2条row..在插入新的row
      

  2.   

    基本是这个意思,适当调整DataTable dt2 = dt1.Copy();
                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);
      

  3.   


    这个就交给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 行受影响)
    */
      

  4.   

    DataTable dt = CreateDataTable();//得到你的datatable
                    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已符合要求
      

  5.   

    select * from table1 where id < 4
    UNION
    select 4 as id,'其他',sum(age),sum(money) from table1 where id >= 4
      

  6.   


     var result= dt.AsEnumerable().Where((a, index) => index >= dt.Rows.Count - 2).CopyToDataTable<DataRow>();这句没看懂 能否标明下 dt.AsEnumerable() 貌似报错的
      

  7.   

    DataTable dt = new DataTable();
    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就是你要的。
      

  8.   

    习惯了就好 唉 CSDN 新版不上线 这老版故障太多啦。
      

  9.   

    dt.AsEnumerable() 貌似报错的 你的是vs2005?