关于sql server 7.0的问题(100分)

  • 主题发起人 主题发起人 fstao
  • 开始时间 开始时间
F

fstao

Unregistered / Unconfirmed
GUEST, unregistred user!
mssql7.0的问题:
假如有主表dbo.salary_storage
id name
1 a
2 b
3 c

从表dbo.salary_detail(sid是自增字段,id是与主表id关联,proid_in是进货的,与
product_storage的id 关联的,proid_out是退货的,与product_storage的id关联的,
sl_in和sl_out分别是进货数量和退货数量,而price_in和price_out分别是进货单价和
退货单价)
sid id proid_in proid_out sl_in sl_out price_in price_out
1 1 1 2 10
2 1 2 1 12
3 1 2 1 12
4 1 1 1 10
5 2 3 4 2
6 2 4 3 3
7 2 3 2 2


货物表:dbo.product_storage
id pro_name
1 A货品
2 B货品
3 C货品
4 D货品

比如要显示以下的明细表:
货物名称 进货数量 进货金额
A货品 2 20
B货品 1 12
C货品 4 8
D货品 3 9

我这样写:select p1.pro_name 货物名称,sum(s1.sl_in) 进货数量,sum(s1.sl_in*s1.price_in)
进货金额, sum(s2.sl_out) 退货数量, sum(s2.sl_out*s2.price_out) 退货金额 from
product_storage p1 left join salary_detail s1 on s1.proid_in = p1.id left join
salary_detail s2 on s2.proid_out = p1.id group by p1.pro_name


就会显示这样的明细表:
货物名称 进货数量 进货金额 退货数量 退货金额
A货品 2 20 1 10
B货品 1 12 1 12
C货品 4 8 2 4
D货品 3 9

但是我再加个条件根据主表dbo.salary_storge的name=b时得到的明细表:
货物名称 进货数量 进货金额 退货数量 退货金额
C货品 4 8 2 4
D货品 3 9

又如何这写sql语句呢?
 
关联主表,where ...不就行了吗?
 
可以用如下的SQL语句:
select p1.pro_name 货物名称,
sum(IsNull(s1.sl_in, 0)) 进货数量,
sum(IsNull(s1.sl_in*s1.price_in, 0)) 进货金额,
sum(IsNull(s2.sl_out, 0)) 退货数量,
sum(IsNull(s2.sl_out*s2.price_out, 0)) 退货金额
from product_storage p1, salary_detail s1, salary_detail s2
where s1.id = (select id from salary_storage where name='b')
and s2.id = (select id from salary_storage where name='b')
and s1.proid_in =* p1.id
and s2.proid_out =* p1.id
group by p1.pro_name
having
sum(IsNull(s1.sl_in, 0))>0 or sum(IsNull(s1.sl_out, 0))>0
 
接受答案了.
 

Similar threads

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