日期:2014-05-19  浏览次数:20569 次

求SQL语句,帮忙看看错在什么地方?
AA表:
DEP,ID,SPEC,SAL_NUM
部门,货号,规格,销售数量
100,A001,99-00,122
100,A001,98-00,205
200,A012,11-00,64
200,A013,99-00,870
。。。。。。。。。。。
BB表:
DEP,ID,SPEC,KC_NUM
部门,货号,规格,库存数量
100,A001,99-00,500
100,A001,98-00,1000
200,A012,11-00,200
200,A013,99-00,2000
。。。。。。。。。。。。

货号-规格   两者定位唯一值
求1:
货号,规格,部门1销售数量,部门2销售数量   .。。。。。。

我用以下语句可以实现:
select   a.ID,a.SPEC,
sum(case   a.dep   when   '100 '   then   a.SAL_NUM)   as   部门100销售
sum(case   a.dep   when   '200 '   then   a.SAL_NUM)   as   部门200销售
。。。。。。。。
from   AA   a
group   by   a.ID,a.SPEC
order   by   a.ID,a.SPEC  


求2:
货号,规格,部门1销售数量,部门1库存数量,部门2销售数量,部门2库存数量.。。。。。。

我用以下语句得到的数据是不对的,不知道错在什么地方,望指点!
select   a.ID,a.SPEC,
sum(case   a.dep   when   '100 '   then   a.SAL_NUM)   as   部门100销售
sum(case   b.dep   when   '100 '   then   b.KC_NUM)   as   部门100库存
sum(case   a.dep   when   '200 '   then   a.SAL_NUM)   as   部门200销售
sum(case   b.dep   when   '200 '   then   b.SAL_NUM)   as   部门200库存
。。。。。。。。
from   AA   a,BB   b
where   a.ID=b.ID   and   a.SPEC=b.SPEC
group   by   a.ID,a.SPEC  
order   by   a.ID,a.SPEC

------解决方案--------------------
case .. when ... then ...
when ... then ..
else
...
end ---end丢了
------解决方案--------------------
select a.ID,a.SPEC,
sum(case a.dep when '100 ' then a.SAL_NUM end) as 部门100销售
sum(case a.dep when '200 ' then a.SAL_NUM end) as 部门200销售
。。。。。。。。
from AA a
group by a.ID,a.SPEC
order by a.ID,a.SPEC


case 后要又 end

------解决方案--------------------
select a.[ID],a.SPEC,
sum(case a.dep when '100 ' then a.sal_num end) as 部门100销售,
sum(case b.dep when '100 ' then b.kc_num end) as 部门100库存,
sum(case a.dep when '200 ' then a.sal_num end) as 部门200销售,
sum(case b.dep when '200 ' then b.kc_num end) as 部门200库存 from AA a,BB b
where a.[ID]=b.[ID] and a.SPEC=b.SPEC
group by a.[ID],a.SPEC
order by a.[ID],a.SPEC
列名错了
------解决方案--------------------
应该没错。提示什么错误?
------解决方案--------------------
不对?怎么个不对法?把数据列出来。还有一点,我不明白你为什么这么写,你自己说已经用 'id ', 'spec '做主键或者说确定唯一值,然后再用这两个列分组,不是多此一举吗?你的第一个语句直接写成
select a.ID,a.SPEC,
(case a.dep when '100 ' then a.SAL_NUM) as 部门100销售
(case a.dep when '200 ' then a.SAL_NUM) as 部门200销售
........
from AA a
order by a.ID,a.SPEC
不就行了吗?
你写的语句我试过了,结果是正确的。也许别的地方(比如你省略的地方)有问题?
------解决方案--------------------
select a.ID,a.SPEC,
sum(case a.dep when '100 ' then a.SAL_NUM end) as 部门100销售,
sum(case b.dep when '100 ' then b.KC_NUM end) as 部门100库存,
sum(case a.dep when '200 ' then a.SAL_NUM end ) as 部门200销售,
sum(case b.dep when '200 ' then b.SAL_NUM end ) as 部门200库存,
。。。。。。。。
from AA a inner join BB b on a.ID=b.ID and a.SPEC=b.SPEC
group by a.ID,a.SPEC