日期:2014-05-18  浏览次数:20585 次

关于SQL查询的问题,想一上午了没想出来,大家帮帮忙啊!!!
有一个问题,想了很久也想不出来,让大家帮忙解决一下,谢谢
现在有两个表
一个A表,一个B表,

B表字段与A表字段相同,只不过A表是今年的数据,B表是去年的数据

A表字段 detpid groupname shopname truevalue
A表数据:

11 休闲食品 大大店 2000
12 粮油 大大店 210
13 酒水 大大店 320
14 肉 大大店 3543
15 蛋 大大店 56
16 家用 大大店 54
17 文体 大大店 21312
18 针织 大大店 32131
19 统合 大大店 45645
20 蔬菜 大大店 5464
22 散干 大大店 645
23 茶叶 大大店 8773
11 休闲食品 大大店 2000
12 粮油 大大店 210
13 酒水 大大店 320
14 肉 大大店 3543
15 蛋 大大店 56
16 家用 大大店 54
17 文体 大大店 21312
18 针织 大大店 32131
19 统合 大大店 45645
20 蔬菜 大大店 5464
22 散干 大大店 645
23 茶叶 大大店 8773
B表数据:
11 休闲食品 大大店 2000
12 粮油 大大店 210
13 酒水 大大店 320
14 肉 大大店 3543
15 蛋 大大店 56
16 家用 大大店 54
17 文体 大大店 21312
18 针织 大大店 32131
19 统合 大大店 45645
20 蔬菜 大大店 5464
21 水产 大大店 78789

我用的是select deptid,groupname,shopname,sum(truevalue)
  from a left join b on a.deptid = b.deptid on a.shopid = 'Q006'
  group by a.deptid,a.groupname,a.shopname

我想要实现的就是,两个表结合起来求合,因为A表数据全,新加的deptid全在A表里,B表里没有,所以我只能用left join 左连接来实现A表的数据全部显示,A表有时有deptid = 21的时候,就可以求,就是我想要的结果,就没有问题了。
但是有的时候A表没有21这个部门ID,因为有的门店,像shopid='Q006'就没有21这个部门ID,所以a.deptid就没有办法=b.deptid,所以B表的部门编码=21的数据就查询不出来,因为A表里没有部门编码=21的数据
大家想想有什么办法能求出来?我用union了,不行,因为有的时候A表里还是有部门=21的数据,结果会出来两条。我就是想要一条的合。

------解决方案--------------------
SQL code

先通过 A表和B表 把 所有DEPTID 求出来放到一个中间表C中
然后以 from C left join A on ... left join B on...

即 
select col1,col2,col3,....  from (select detpid from a union select detpid from b)c 
left join A on ... left join B on...