请教一个组合查询的问题

TripleH 2009-05-04 09:25:39
表A的记录如下:
编码 姓名 变动数A 年度 月份
1001 张三 1000 2008 10
1001 张三 1000 2008 11
1001 张三 1000 2008 12
1002 李四 2000 2008 10
1002 李四 1000 2008 11
1002 李四 2000 2008 12
……



表B的记录如下:
编码 姓名 变动数B 年度 月份
1001 张三 20 2008 10
1002 李四 100 2008 10
1002 李四 200 2008 12
……


那么怎么需要合成如下的结果?
编码 姓名 最终变动数 年度 月份
1001 张三 1020 2008 10
1001 张三 1000 2008 11
1001 张三 1000 2008 12
1002 李四 2100 2008 10
1002 李四 1000 2008 11
1002 李四 2200 2008 12
……

其中最终变动数是表A的变动数A的值加上表B的变动数B的值,需要注意的是, 表B里的记录不是每个月都有的。如:张三在11月和12月就没有,所以最终变动数还是为表A里的值。请教这个查询怎么做呢?
...全文
82 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
TripleH 2009-05-04
  • 打赏
  • 举报
回复
阿凡提老大,你太快了,小弟马上试试!谢谢!
conan304 2009-05-04
  • 打赏
  • 举报
回复
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 行)

*/
水族杰纶 2009-05-04
  • 打赏
  • 举报
回复
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

*/
rucypli 2009-05-04
  • 打赏
  • 举报
回复
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.姓名
水族杰纶 2009-05-04
  • 打赏
  • 举报
回复
SELECT 编码,姓名,SUM(变动数A),年度,月份 FROM (
SELECT * FROM TA
UNION ALL
SELECT * FROM TB)T GROUP BY 编码,姓名,年度,月份

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧