sql怎么写(50分)

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

waterjin

Unregistered / Unconfirmed
GUEST, unregistred user!
有个计算机消耗材料管理,有个表,字段有bmbh(部门编号)。sl(数量),bz(0为入库,1为
领用,rq(日期,date类型,是这样的格式:2002-09-05)。clmc( 材料名称)
现在要写个 sql查询,输出这样的格式:(用户在edit中输入部门编号和月份)

1001部门9月份领用和入库情况:
材料名称 入库数量合计 领用数量合计
cr3240色带 49 20

这个 sql 语句应怎么写,我能写这样的:
材料名称 入库数量合计
cr3240色带 49
select clmc as "材料名称",sum(sl) as "入库数量合计" from mx where bmbh=:x and bz=0
and rq=....
我现在不知道的是怎么把领用合计(bz为1)放在一个view 图中,和怎么限定9月分的记录。

谢谢各位指教
 
select distinct d1.clmc as "材料名称",(select sum(sl) from mx d2 where d2.clmc=d1.clmc
and bmbh=:x and bz=0 and (rq between '2002-9-1' and '2002-9-30') as "入库数量合计",
(select sum(sl) from mx d3 where d3.clmc=d1.clmc
and bmbh=:x and bz=1 and (rq between '2002-9-1' and '2002-9-30') as "领用数量合计"
from mx d1
 
不对呀
我想出来效果应是这样的呀:
1001部门9月份领用和入库情况:
材料名称 入库数量合计 领用数量合计
cr3240色带 49 20
pr-2色带 200 100
至少还应该用group by clmc吧

你的d1,d2.d3 是什么意思?能给我解释解释吗?
 
d1 d2 d3 是别名呀,自连接查询经常要用的呀,建议你多看书
 
pengjinlongex 写的基本是对的啊。

他用了distinct而不是group by 来保证材料名称不重复。

不过日期条件好像不对。对于access可以用 rq between #2002-9-1# and #2002-9-30#
对于oracle 可以用to_char函数。
或者干脆用变量好了。
 
我是用mysql的,不会是mysql不支持锲套的查询吧?比如 selsect (select xx from table where ...) from ...
反正我照写了,老说我错,我翻了mysql手册,它说还支持不锲套的查询,可以用临时表来代替,
就是这个意思吧?怎么mysql这么破啊,我晕。用临时表怎么来做我这个例子啊?
不好意思,刚学delphi和数据库,比较菜,各位耐心点,多多指教啊

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
I
回复
0
查看
596
import
I
后退
顶部