首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求SQL语句,帮忙看看错在什么地方?该怎么解决

2012-01-30 
求SQL语句,帮忙看看错在什么地方?AA表:DEP,ID,SPEC,SAL_NUM部门,货号,规格,销售数量100,A001,99-00,122100

求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


order by a.ID,a.SPEC

A B 表要保证数据是一对一的关系,如果出现一对多的关系 结果就会出错 ,SUM 的时候会重复计算

热点排行
Bad Request.