读书人

SQL 写法 请问

发布时间: 2013-03-01 18:33:02 作者: rapoo

SQL 写法 请教
这里有3个表

库存表

商品编号 商品名称 商品货号 数量
100001 A10001 A01 8
100002 A10002 A02 8
100003 A10002 B01 5
100004 A10003 A07 10
100005 A10003 B06 5

库存表内商品编号没有重复的信息

进货退货表

商品编号 商品名称 商品货号 数量 供货商 类型
100001 A10001 A01 5 G1001 进货
100002 A10002 A02 5 G1001 进货
100003 A10002 B01 5 G1002 进货
100004 A10003 A07 5 G1002 进货
100005 A10003 B06 10 G1002 进货
100001 A10001 A01 5 G1005 进货
100002 A10002 A02 5 G1005 进货
100003 A10002 B01 5 G1005 进货
100004 A10003 A07 5 G1005 进货
100005 A10003 B06 5 G1005 退货

进货退货表有重复的商品编号

销售表

商品编号 商品名称 商品货号 数量
100001 A10001 A01 2
100002 A10002 A02 2
100003 A10002 B01 5


查询 进、退、销、存

SELECT="A.商品编号,A.商品名称,A.商品货号,A.数量,SUM(B.数量),SUM(C.数量),SUM(D.数量),E.供货商"
FROM 库存表 A,进货退货表 B,进货退货表 C,销售表 D,进货退货表 E
WHERE

B.商品编号=A.商品编号
C.商品编号=A.商品编号
D.商品编号=A.商品编号
E.商品编号=A.商品编号

group by
A.商品编号,A.商品名称,A.商品货号,A.数量,E.供货商

正确语句该如何写,请教大侠!

SQL语句
[解决办法]
不是跟这个类似吗

http://bbs.csdn.net/topics/390374393
[解决办法]
Join 改成 Left Join ,然后在数量那里 加上一个判断 isnull(数量,0) as 数量 这样就行了。
[解决办法]
SELECT A.商品编号,A.商品名称 as 商品名称,A.商品货号 as 商品货号,B.进货量 AS 进货总量,isnull(C.退货量,0) AS 退货总量,isnull(D.销售量,0) AS 销售总量,A.数量 as 现库存量,B.供货商


FROM 库存 A
Join (select 商品编号,sum(数量) as 进货量,供货商,类型 from 进货退货 group by 商品编号,供货商,类型) B ON B.商品编号=A.商品编号 AND B.类型='进货单'
Left Join (select 商品编号,SUM(减少) AS 销售量 from 汇总单 group by 商品编号) D On B.商品编号=D.商品编号
Left Join (select 商品编号,sum(数量) as 退货量,类型 from 进货退货 group by 商品编号,类型) C ON C.商品编号=A.商品编号 AND C.类型='进货退货单'

读书人网 >SQL Server

热点推荐