问题如题:
要求结果如下:第四列是要将计算结果写入的列,计算要求为:
先找到所有第一列相同的列,然后分别将这些相同的第二,第三列分别求和,然后再将第三列的和减去第二列的和.将结果写在第四列中的所有第一列相同的行中.列一      列二      列三     列四
A1        10        10       -5 
A1        10        5        -5
A1        5         5        -5
B1        10        20       10 
B1        5         5        10如何实现,谢谢各位了,我想了半天,抽了十根烟,就是没想出来,唉.

解决方案 »

  1.   

    直接在数据库中处理,group by 列一,然后Join到原来的表上
      

  2.   

    我想了半天,抽了十根烟,就是没想出来,
    几个Foreach
      

  3.   

    LZ的意思就是说,在列一相同的那些行(比如说前三行一组,后两行一组)加到一起,将列三的和减去列二,变成列四,其实也就是group by 列一
      

  4.   


    select test1.f1,f2,f3,temp.f4 from test1
    left join
    (select f1,SUM(f3)-SUM(f2) f4 from test1 
    group by f1) temp on temp.f1=test1.f1
      

  5.   

    在SQL中按照列1分组求 列二、 列三和,再实现相减形成第四列
    再绑定到datagridview
      

  6.   

    declare @test table(L1 varchar(50),L2 int,L3 int)
    insert into @test
    select 'A1',10,10 union all
    select 'A1',10,5 union all
    select 'A1',5,5 union all
    select 'B1',10,20 union all
    select 'B1',5,5 select a.*,b.L4 from @test a join
    (select L1,sum(L3)-Sum(L2) as L4 from @test group by L1) b on a.L1=b.L1
      

  7.   

    很遗憾,只有第一列是来自数据库,所以不可能只用sql
      

  8.   

    5 行受影响)
    L1                                                 L2          L3
    -------------------------------------------------- ----------- -----------
    A1                                                 10          10
    A1                                                 10          5
    A1                                                 5           5
    B1                                                 10          20
    B1                                                 5           5(5 行受影响)L1                                                 L2          L3          L4
    -------------------------------------------------- ----------- ----------- -----------
    A1                                                 10          10          -5
    A1                                                 10          5           -5
    A1                                                 5           5           -5
    B1                                                 10          20          10
    B1                                                 5           5           10(5 行受影响)
      

  9.   

    那就存进数据库里面咯。
    不晓得DataTable里面可不可以用上sql语句,如果可以就好办了。
      

  10.   

    其实原表是这样的.这是一个产线上的实时物料使用状态表.原表第一列是料号,第二列是物料的替代关系.第三列是已发到产线的物料,第四列是产线已用的物料.其中第三,第四列是一个实时变化的,他无法用sql语句直接得到,所以需要在界面上计算,当然,就算可以用sql取得,作为一个实时的表,这样的查询也太耗资源了.刚才有人说我说得不太清楚,那我就再描述一下.就是上表示所说的,将所有A1行的第二列,第三列分另求和.再将第三列的结果减去第二列的结果.将最终结果填充到第四列中所有的A1行中.后面以此类推.列一      列二      列三    列四 
    A1        10        10      -5 
    A1        10        5        -5 
    A1        5        5        -5 
    -------------------------------
              25       20       -5这个-5就是这么来的.
      

  11.   

    用两个datagridview解决
    原来数据表为datagridview1 ,新的空数据为datagridview2
    把表datagridview1数据有条件逐行添加到datagridview2
    逐行添加思路如下
    遍历表datagridview1,如果datagridview2存在A1则第三列相加,第二列也相加
    如果datagridview2不存在B1则添加B1,再第三列相加,第二列相加
    结果datagridview2就是一个类似A1 B1第二,三列汇总好的新表,再第三列减第二列就是第四列
    datagridview2就是最终楼主想要的表格,而且对datagridview1原始数据不作任何修改
    datagridview1,datagridview2功能区分明显易于以后数据变更处理
      

  12.   


                DataTable MyDT = new DataTable();
                MyDT.Columns.Add("列1");
                MyDT.Columns.Add("列2");
                MyDT.Columns.Add("列3");
                MyDT.Columns.Add("列4");
                DataRow row1 = MyDT.NewRow();
                row1["列1"] = "A1";
                row1["列2"] = 10;
                row1["列3"] = 10;
                row1["列4"] = "";
                MyDT.Rows.Add(row1);
                DataRow row2 = MyDT.NewRow();
                row2["列1"] = "A1";
                row2["列2"] = 10;
                row2["列3"] = 5;
                row2["列4"] = "";
                MyDT.Rows.Add(row2);
                DataRow row3 = MyDT.NewRow();
                row3["列1"] = "A1";
                row3["列2"] = 5;
                row3["列3"] = 5;
                row3["列4"] = "";
                MyDT.Rows.Add(row3);
                DataRow row4 = MyDT.NewRow();
                row4["列1"] = "B1";
                row4["列2"] = 10;
                row4["列3"] = 20;
                row4["列4"] = "";
                MyDT.Rows.Add(row4);
                DataRow row5 = MyDT.NewRow();
                row5["列1"] = "B1";
                row5["列2"] = 5;
                row5["列3"] = 5;
                row5["列4"] = "";
                MyDT.Rows.Add(row5);
                Hashtable HT = new Hashtable();
                for (int i = 0; i < MyDT.Rows.Count; i++)
                {
                    if (HT.ContainsKey(MyDT.Rows[i][0].ToString()))
                    {
                        HT[MyDT.Rows[i][0].ToString()] = Convert.ToInt32(HT[MyDT.Rows[i][0].ToString()])+Convert.ToInt32(MyDT.Rows[i][2]) - Convert.ToInt32(MyDT.Rows[i][1]);
                    }
                    else
                    {
                        HT.Add(MyDT.Rows[i][0].ToString(), Convert.ToInt32(MyDT.Rows[i][2]) - Convert.ToInt32(MyDT.Rows[i][1]));
                    }
                }
                for (int i = 0; i < MyDT.Rows.Count; i++)
                {
                    MyDT.Rows[i][3] = HT[MyDT.Rows[i][0].ToString()];
                }
                dataGridView1.DataSource = MyDT;
      

  13.   


    用哈希表,不错,不过我也想到信方法,用LinSql to object.
    谢谢楼上的.学习了.
      

  14.   

    哈哈,要是早说可以用08的LinQ那就简单了