有两个表,
总表数据(zb)
总表编号 总表名称 分表总用水量 分表编号
1 A村总表 ? 1001,1002,1003
2 b村总表 ? 1005,1006
...分表数据(fb)
分表编号 分表名称 用水量
1001 A村101号 10
1002 A村201号 5
1003 A村101号 20
1005 B村1号 15
1006 B村2号 5
...
1075 G村1号 5如何将分表中的 “用水量” 合计放在 总表的对应记录“分表总用水量”中
上面的总表的数据应为总表编号 总表名称 分表总用水量 分表编号
1 A村总表 35 1001,1002,1003
2 b村总表 20 1005,1006,
总表数据(zb)
总表编号 总表名称 分表总用水量 分表编号
1 A村总表 ? 1001,1002,1003
2 b村总表 ? 1005,1006
...分表数据(fb)
分表编号 分表名称 用水量
1001 A村101号 10
1002 A村201号 5
1003 A村101号 20
1005 B村1号 15
1006 B村2号 5
...
1075 G村1号 5如何将分表中的 “用水量” 合计放在 总表的对应记录“分表总用水量”中
上面的总表的数据应为总表编号 总表名称 分表总用水量 分表编号
1 A村总表 35 1001,1002,1003
2 b村总表 20 1005,1006,
--手工写,没测试过
select a.*,[sum_用水量] = sum(b.用水量)
from zb a,
fb b
where charindex(','+cast(b.分表编号 as varchar)+',',','+a.分表编号+',')>0
group by a.总表编号,a.总表名称,a.分表总用水量,a.分表编号
create table #zb(
总表编号 int,
总表名称 nvarchar(10),
分表总用水量 int,
分表编号 varchar(50)
)
insert into #zb
select 1,'A村总表',null,'1001,1002,1003' union all
select 2,'b村总表',null,'1005,1006'create table #fb(
分表编号 int,
分表名称 nvarchar(10),
用水量 int
)
insert into #fb
select 1001,'A村101号',10 union all
select 1002,'A村201号',5 union all
select 1003,'A村101号',20 union all
select 1005,'B村1号',15 union all
select 1006,'B村2号',5select a.*,[sum_用水量] = sum(b.用水量)
from #zb a,
#fb b
where charindex(','+cast(b.分表编号 as varchar)+',',','+a.分表编号+',')>0
group by a.总表编号,a.总表名称,a.分表总用水量,a.分表编号--结果
/*
总表编号 总表名称 分表总用水量 分表编号 sum_用水量
----------- ---------- ----------- -------------------------------------------------- -----------
1 A村总表 NULL 1001,1002,1003 35
2 b村总表 NULL 1005,1006 20(2 行受影响)
*/
select left(分表名称,2) as 总表名称,sum(用水量)as 总用水量
into #temp
from fb group by left(分表名称,2)update zb set 分表总用水量=(select 总用水量 from #temp where left(zb.总表名称,2)=总表名称)
set zb.分表总用水量=b.分表总用水量
from zb a
left join (
select 总表名称,SUM(用水量) 分表总用水量
from zb,fb
where CHARINDEX(','+LTRIM(fb.分表编号)+'',','+zb.分表编号+',')>0
group by zb.总表名称
) b on a.总表名称=b.总表名称
select SUM(用水量) from fb where CHARINDEX(','+LTRIM(分表编号)+'',','+zb.分表编号+',')>0 )