SQL JOIN 3 TABLES WITH COUNT AND GROUP BY CLAUSE

时间:2014-08-28 14:54:42

标签: sql sql-server database tsql join

我有3张这样的表:

EXPEDITION (ID, CreateDate, Status);
PACKAGE (ID, EXPEDITION_ID)
ITEM (ID, EXPEDIITONPACKAGE_ID);

我需要知道,每次探险时,包裹数量和物品数量。

2 个答案:

答案 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.p​​akId,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