如果我有两个表
dt1工号  地域 县市 数量1 数量2
 
001   1350 1351  1   1
002   1350 1351  1   1
004   1350 1351  1   1dt2 
工号  地域 县市 数量1 
001   1350 1351  1  
002   1350 1351  1  
003   1350 1351  1
需要合并成下面这样.
dt3
工号  地域 县市 数量1 数量2
001  1350 1351  2    2
002  1350 1351  2    2
003  1350 1351  1    0
004  1350 1351  1    1
这个算法要怎么写各位大虾支支招。。急

解决方案 »

  1.   

    以一个dt为基础,去另一个里面找相同的数据,找到后再计算如
    dt1.Columns.Add("数量2",typeof(int));
    循环dt1.foreach(DataRow row in dt1.Rows)
    {
        DataView dv = dt2.DefautView;
        dv.RowFilter= "工号='"+ row["工号"]+"' and .... " ;
       if(dv.Count>0)
      {
       
    row["数量2"]  = dv[0]["数量2"];
      }}
      

  2.   

    工号  地域 县市 数量1 数量2 001  1350 1351  1  1 
    002  1350 1351  1  1 
    004  1350 1351  1  1 dt2 
    工号  地域 县市 数量1 
    001  1350 1351  1  
    002  1350 1351  1  
    003  1350 1351  1 
    需要合并成下面这样. 
    dt3 
    工号  地域 县市 数量1 数量2 
    001  1350 1351  2    1 
    002  1350 1351  2    1 
    003  1350 1351  1    0 
    004  1350 1351  1    1 
    开始dt3的数据加错了
      

  3.   

    foreach(DataRow row in dt1.Rows)
    {
    DataRow[] dt2Rows = dt2.Select(String.Format("工号='{0}'", row["工号"]));
    if(dt2Rows.Length > 0)
    {
    row["数量1"] = Convert.ToInt32(row["数量1"]) + Convert.ToInt32(dt2Rows[0]["数量1"])
    }
    }
      

  4.   

    楼主我的建议是最好在SQL里面直接一句话查出来,
      

  5.   


    create table #dt1
    (
    工号  varchar(10),
    地域  int,
    县市  int,
    数量1 int,
    数量2 int
    )
    insert into #dt1
    values('001',1350,1351,1,1)
    insert into #dt1
    values('002',1350,1351,1,1)
    insert into #dt1
    values('004',1350,1351,1,1)
    create table #dt2
    (
    工号  varchar(10),
    地域  int,
    县市  int,
    数量1 int
    )
    insert into #dt2
    values('001',1350,1351,1)
    insert into #dt2
    values('002',1350,1351,1)
    insert into #dt2
    values('003',1350,1351,1)select 工号,地域,县市,sum(数量1) as 数量1,sum(数量2)as 数量2 from 
    (select 工号,地域,县市,数量1,数量2 from #dt1
    union all
    select 工号,地域,县市,数量1,'0' as 数量2 from #dt2)as a
    group by  工号,地域,县市
      

  6.   

    sql中
    --> 测试数据:[dt1]
    if object_id('[dt1]') is not null drop table [dt1]
    create table [dt1]([工号] varchar(3),[地域] int,[县市] int,[数量1] int,[数量2] int)
    insert [dt1]
    select '001',1350,1351,1,1 union all
    select '002',1350,1351,1,1 union all
    select '004',1350,1351,1,1
    --> 测试数据:[dt2]
    if object_id('[dt2]') is not null drop table [dt2]
    create table [dt2]([工号] varchar(3),[地域] int,[县市] int,[数量1] int)
    insert [dt2]
    select '001',1350,1351,1 union all
    select '002',1350,1351,1 union all
    select '003',1350,1351,1select 工号,地域,县市,数量1=sum(数量1),数量2=sum(数量2) from(
    select 工号,地域,县市,数量1,数量2 from dt1 union all
    select 工号,地域,县市,数量1,0 from dt2)t
    group by 工号,地域,县市/*
    工号   地域          县市          数量1         数量2         
    ---- ----------- ----------- ----------- ----------- 
    001  1350        1351        2           1
    002  1350        1351        2           1
    003  1350        1351        1           0
    004  1350        1351        1           1(所影响的行数为 4 行)*/drop table dt1,dt2C#中,建议楼主把你的程序贴出来,也就是两个表datetable,光生成你的两个datetable要花点时间的,
    建议直接贴出来
      

  7.   

    我自己写的,不知道是否符合你的要求。            dt1.Merge(dt2);
                DataTable dt3 = dt1.Clone();
                DataView dv = dt1.Copy().DefaultView;
                dv.Sort = "id asc";
                string id = string.Empty;
                foreach (DataRowView drv in dv)
                {
                    if (id != drv["id"].ToString())
                    {
                        drv["count1"] = dt1.Compute("sum(count1)", "id=" + drv["id"]);
                        drv["count2"] = dt1.Compute("sum(count2)", "id=" + drv["id"]);
                        dt3.Rows.Add(new object[] { drv["id"], drv["count1"], drv["count2"] });
                        id = drv["id"].ToString();
                    }
                }
                //返回结果t3