如果我有两个表
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
这个算法要怎么写各位大虾支支招。。急
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
这个算法要怎么写各位大虾支支招。。急
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"];
}}
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的数据加错了
{
DataRow[] dt2Rows = dt2.Select(String.Format("工号='{0}'", row["工号"]));
if(dt2Rows.Length > 0)
{
row["数量1"] = Convert.ToInt32(row["数量1"]) + Convert.ToInt32(dt2Rows[0]["数量1"])
}
}
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 工号,地域,县市
--> 测试数据:[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要花点时间的,
建议直接贴出来
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