22,210
社区成员
发帖
与我相关
我的任务
分享
declare @t table(编码 varchar(4),姓名 varchar(4),变动数A int,年度 int,月份 int)
insert @t select '1001','张三',1000,2008,10
insert @t select '1001','张三',1000,2008,11
insert @t select '1001','张三',1000,2008,12
insert @t select '1002','李四',2000,2008,10
insert @t select '1002','李四',1000,2008,11
insert @t select '1002','李四',2000,2008,11
declare @b table(编码 varchar(4),姓名 varchar(4),变动数b int,年度 int,月份 int)
insert @b select '1001','张三',20,2008,10
insert @b select '1002','李四',100,2008,10
insert @b select '1002','李四',200,2008,12
select a.编码,a.姓名,'最终变动数'=(isnull(a.变动数A,0)+isnull(b.变动数b,0)),a.年度,a.月份
from @t a left join @b b on a.姓名=b.姓名 and a.年度=b.年度 and a.月份=b.月份
/*
编码 姓名 最终变动数 年度 月份
---- ---- ----------- ----------- -----------
1001 张三 1020 2008 10
1001 张三 1000 2008 11
1001 张三 1000 2008 12
1002 李四 2100 2008 10
1002 李四 1000 2008 11
1002 李四 2000 2008 11
(所影响的行数为 6 行)
*/
DECLARE @A TABLE(编码 INT, 姓名 NVARCHAR(10), 变动数A INT, 年度 INT, 月份 INT)
INSERT @A SELECT 1001 ,N'张三', 1000 , 2008 , 10
INSERT @A SELECT 1001 ,N'张三', 1000 , 2008 , 11
INSERT @A SELECT 1001 ,N'张三', 1000 , 2008 , 12
INSERT @A SELECT 1002 ,N'李四', 2000 , 2008 , 10
INSERT @A SELECT 1002 , N'李四', 1000 , 2008 , 11
INSERT @A SELECT 1002, N'李四', 2000, 2008 ,12
DECLARE @B TABLE(编码 INT, 姓名 NVARCHAR(10), 变动数B INT, 年度 INT, 月份 INT)
INSERT @B SELECT 1001 , N'张三', 20 , 2008 , 10
INSERT @B SELECT 1002 , N'李四', 100, 2008 , 10
INSERT @B SELECT 1002, N'李四', 200 , 2008, 12
SELECT 编码,姓名,SUM(变动数A),年度,月份 FROM (
SELECT * FROM @A
UNION ALL
SELECT * FROM @B)T GROUP BY 编码,姓名,年度,月份
/*编码 姓名 年度 月份
----------- ---------- ----------- ----------- -----------
1001 张三 1020 2008 10
1001 张三 1000 2008 11
1001 张三 1000 2008 12
1002 李四 2100 2008 10
1002 李四 1000 2008 11
1002 李四 2200 2008 12
*/
select A.编码,A.姓名,A.变动数+isnull(B.变动数,0) as 最终变动数,A.年度,A.月份
from tb A left join tb B on A.编码=B.编码 and A.年度=B.年度 and A.月份=B.月份 and A.姓名=B.姓名
SELECT 编码,姓名,SUM(变动数A),年度,月份 FROM (
SELECT * FROM TA
UNION ALL
SELECT * FROM TB)T GROUP BY 编码,姓名,年度,月份