==========求一句SQL语句==========(50分)

  • 主题发起人 主题发起人 JasonLaw
  • 开始时间 开始时间
J

JasonLaw

Unregistered / Unconfirmed
GUEST, unregistred user!
表A (商品表)

ID 名称 颜色
1 Name1 Color
2 Name2 None
.......

表B (原料表)

ID 开料 数量
1 纸 40
2 墨 30
......

表C (库存表)
ID 数量
1 30
.....



我用以下SQL语句

SELECT A.ID, A.名称, Sum(B.数量) AS 开料数量, Sum(C.数量) AS 库存数量
FROM C INNER JOIN (B INNER JOIN A ON B.ID = A.ID) ON C.ID = A.ID
GROUP BY A.ID, A.名称;

只能得到

ID 名称 开料数量 库存数量
1 Name1 40 30


但是我想得到的结果

ID 名称 开料数量 库存数量
1 Name1 40 30
2 Name2 30 0

也就是说:
我每对应的 库表料 或是 原料表 不一定有 对应商品表 ID 的 数量。

但是我想,如果没有,就用就用 0 来表示。.
 
所有表的ID是否存在,除了第一個表?
 
SELECT A.ID, A.名称, Sum(B.数量) AS 开料数量, Sum(C.数量) AS 库存数量
FROM C left JOIN (B INNER JOIN A ON B.ID = A.ID) ON C.ID = A.ID
GROUP BY A.ID, A.名称;

left join 可满足你的要求,不过,查出来的不同0而是空:
1 Name1 40 30
2 Name2 30 null
 
SELECT A.ID, A.名称,
开料数量=(SELECT Sum(B.数量) FROM B WHERE A.ID=B.ID),
库存数量=(SELECT Sum(C.数量) FROM C WHERE A.ID=C.ID)
FROM A
GROUP BY A.ID, A.名称;Sum(B.数量);开料数量;库存数量
 
select A.ID,A.名称,(select isnull(sum(B.数量),0) from B where A.ID=B.ID) as 开料数量,(select isnull(sum(C.数量),0) from C where C.ID=A.ID) as 库存数量 from A
 
ACCESS 不支持..?
 
多人接受答案了。
 
表多了也是累赘
 
后退
顶部