一个sql查询问题(50分)

  • 主题发起人 主题发起人 waterjin
  • 开始时间 开始时间
W

waterjin

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个表,表名mx.db,表中字段有clmc(材料名称),bz(,标志,0为入库,1为领用),
sl ( 数量),bmmc( 部门名称)。还有一些字段如领用人等,这个查询没用到,省略。。。
我现在的要求是获得以下的查询内容:
材料名称   领用合计   入库合计
铅笔    100      200
钢笔    250      50
毛笔    20      22
。。。
也就是说bz为0和1的分别统计合计数,以下是写的sql 查询:

select d1.clmc as 材料名称,(select sum(sl) from mx d2
where d2.clmc=d1.clmc and bz=1 ) as 领用合计,(select sum(sl) from 'mx d3 where d3.clmc=d1.clmc and bz=0) as 入库合计 from mx d1 group by d1.clmc

没有提示出错,但出来的结果是这样的:

材料名称   领用合计   入库合计
铅笔    
钢笔    
毛笔    


应出来合计数的地方是空白的,sql语法应没有错。就是没有合计出来,不知道为什么,请教sql和数据库方面的高手,还有,奇怪的是我在后面加上一个条件where
bmbh=1001,就有数据出来了,但只是1001部门的合计领用入库数:(~~
我已经弄了几天了,就是想不出,还望有高手帮助。。
 
对不起
from 'mx d3 where d3.clmc多了个 ', 是提问题的时候的笔误。
 
不用这么麻烦吧!用下面的试试(我没调试,应该对的)
Select clmc,
LYSL = Sum(Case BZ When 0 then SL else 0 end),
RKSL = Sum(Case BZ When 1 then SL else 0 end) From mx group by clmc
 
我试试看
 
什么问题? 看不到
 
select clmc,sum(sl*bz) as 领用合计,sum(sl*(1 - bz)) as 入库合计 from mx group by clmc

咔咔

搞定!
 
>>rustle
有理!
 
>>waterjin
用rustle兄的,速度肯定要比我的快!
 
  
select res1.clmc as 材料名称, sum1 as 领用合计, sum2 as 入库合计
from
(select clmc, sum(sl) as sum1 from mx where bz=1 group by clmc) res1
inner join
(select clmc, sum(sl) as sum2 from mx where bz=0 group by clmc) res2
on
res2.clmc=res1.clmc
  
 
rustle 兄的不错,行,喀的一声,就搞定了,速度也很快,sandao的我好象不行啊,提示“token: =(sum..."
错误啊。 snowboat 我去试试,如果行,应该snowboat 的比较通用。呵呵。。
 
不好意思,没看清你所用的库,db库不支持CASE语句(sybase,SQl server 等支持!)
------
我写的没错![:D]
 
用一个存储过程判断一下很好解决。
 
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1354567
关注一下吧没有人提起来呀!用MODEM打电话利用PC机的耳机和麦克风,自己编程如何实现?
(我知道有现成的软件可以用,但是我想自己实现这个上东西)
QQ:65466700
MAIL: along@b2sun.com
TEL :13802785865
http://b2sun.com
请各位大侠多多指教!

 
rustle方法很好
 
多人接受答案了。
 
后退
顶部