我有3张这样的表:
EXPEDITION (ID, CreateDate, Status);
PACKAGE (ID, EXPEDITION_ID)
ITEM (ID, EXPEDIITONPACKAGE_ID);
我需要知道,每次探险时,包裹数量和物品数量。
答案 0 :(得分:1)
<强>更新强>
这是一个似乎有它的查询。
SELECT
E.ID,
P.Packages,
I.Items
FROM EXPEDITION E
LEFT JOIN (
SELECT DISTINCT E.ID, COUNT(P.ID) AS "Packages" FROM EXPEDITION E
LEFT JOIN PACKAGE P
ON E.ID = P.EXPEDITION_ID
GROUP BY E.ID
) P
ON E.ID = P.ID
LEFT JOIN (
SELECT DISTINCT P.ID as "PackageID", COUNT(I.ID) AS "Items" FROM PACKAGE P
JOIN ITEM I
ON P.ID = I.EXPEDIITONPACKAGE_ID
GROUP BY P.ID
) I
ON P.ID = I.PackageId
GROUP BY
E.ID,
P.Packages,
I.Items
ORDER BY
E.ID
它有两个内部查询,分别对ID进行计数,并在主查询中加入它们以显示结果。
答案 1 :(得分:0)
试试这个。尚未测试......但它应该工作.. ;用c1作为 ( 选择e.expid,count(e.expid)为qtyPck 从包p内连接 探险e在p.expid = e.expid 由e.expid分组 ) C2为 ( 选择i.pakId,count(i.pakId)为qtyItems 从项目我内部加入包p 在i.pakId = p.pakId 由i.pakid分组 ) 选择e.expId,p.qtyPck,I.qtyItems 从远征e 在p.expId = e.expId上加入包p 在i.pakId = p.pakId;
上加入项目i