2016-06-16 7 views
0

Ich habe zwei Tabellen, und ich muss rechts Join dann tun SUM und Group.SUM und Gruppe nach rechts Join zwei Tabellen

 


    Table1: PRODUCT_NAME 

    ------------------------- 
    Module_Code | Product_ID 
    ----------------------------- 
    0201  | A 
    0202  | A 
    0205  | A 
    0503  | B 
    0507  | B 
    ------------------------------- 

    Table2: SF_PASS 
    ------------------------------- 
    Module_Code | Test_Qty | Phase 
    --------------------------------- 
    0201  | 10  | 1 
    0201  | 20  | 2 
    0201  | 50  | 3 
    0202  | 20  | 1 
    0202  | 20  | 2 
    0202  | 20  | 3 
    0503  | 3  | 1 
    0503  | 4  | 2 
    0503  | 5  | 3 

I need the result as: 
 
    ------------------------- 
    Product_ID | Test_Qty 
    --------------------------- 
    A   | 140 
    B   | 12 


Können Sie helfen?

+1

Warum denken Sie, Sie brauchen ein Recht beitreten - das sieht aus wie ein linker Join oder ein innerer Join. – Hogan

+1

Dies ist kein kostenloser Code-Schreibservice. Bitte zeigen Sie Ihren Versuch, dieses Problem zu lösen. – Alex

Antwort

3

Eine einfache INNER JOIN tun:

SELECT 
    pn.Product_ID, 
    SUM(sp.Test_Qty) AS Test_Qty 
FROM PRODUCT_NAME pn 
INNER JOIN SF_PASS sp 
    ON sp.Module_Code = pn.Module_Code 
GROUP BY 
    pn.Product_ID 

Wenn Sie alle Produkte auch angezeigt werden soll, wenn es keine passenden Zeilen in SF_PASS sind, ändern Sie die INNER JOIN in eine LEFT JOIN:

SELECT 
    pn.Product_ID, 
    COALESCE(SUM(sp.Test_Qty), 0) AS Test_Qty 
FROM #PRODUCT_NAME pn 
LEFT JOIN #SF_PASS sp 
    ON sp.Module_Code = pn.Module_Code 
GROUP BY 
    pn.Product_ID; 

ONLINE DEMO

+0

Ich denke 'SUM (COALESCE (sp.Test_Qty, 0)) AS Test_Qty' ist richtiger. – Hogan

+0

@Hogan Ich bin mir nicht wirklich sicher. Aber bei Ihrer Version wird 'COALESCE' für jede' sp.Test_Qty' aufgerufen, aber bei meiner wird sie nur einmal aufgerufen. Oder gibt es etwas, das ich vermisse? –

+0

Es spielt keine Rolle, ob man vor oder nach der Summe 'coalesce' anwendet. Ich würde es danach bevorzugen (wie es vor Ihrer Bearbeitung war), d. H. Eine normale "Summe" für die Spalte ausführen, dann nur für den Fall, dass das Ergebnis Null ist, mach es 0. Fühlt sich natürlicher an und sollte effizienter sein. –