2016-04-08 9 views
0

Ich habe 3 Tabellen A, B und C wie unten gezeigt.Inner Join von 3 Tabellen mit Zeilenanzahl

A B C

die alle drei Tabellen haben eine gemeinsame CUST_ID Spalte. Und Tabelle A und B haben 2 gemeinsame Spalten CUST_ID und A_ID. Ich habe die NAME aus Tabelle BA für jeden CUST_ID und START und END aus Tabelle C, Graf von Test_ID aus Tabelle anzuzeigen. Die erwartete Ergebnistabelle ist wie,

R

Ich versuchte inner join wie

select C.Name ,A.Start,A.[End] 
from 
C 
inner join 
B 
on C.CUST_ID = B.CUST_ID 
inner join 
A 
on A.A_ID = B.A_ID and A.CUST_ID = B.CUST_ID 

aber seine insgesamt 7 Reihen zu geben. Wie zeigt man die Anzahl Test_ID für Osten CUST_ID an und zeigt es in nur 4 Zeilen an, wie in der erwarteten Ergebnistabelle gezeigt?

Antwort

3

dieses Versuchen

SELECT C.NAME, Tmp.Test_COUNT, A.START, A.END 
    FROM C INNER JOIN A ON C.CUST_ID = A.CUST_ID 
    INNER JOIN 
    (
     SELECT CUST_ID, A_ID, COUNT(*) AS Test_COUNT 
     FROM B 
     GROUP BY CUST_ID, A_ID 
    ) Tmp ON Tmp.CUST_ID = A.CUST_ID AND Tmp.A_ID = A.A_ID  
1

Sie benötigen eine Unterabfrage zu verwenden, um die Testzählungen in Tabelle B zu erhalten, und diese Tabelle beitreten statt B direkt Beitritt:

SELECT C.NAME, t.Test_COUNT, A.START, A.END 
FROM C 
INNER JOIN A 
    ON C.CUST_ID = A.CUST_ID 
INNER JOIN 
(
    SELECT A_ID, COUNT(*) AS Test_COUNT 
    FROM B 
    GROUP BY A_ID 
) t 
    ON t.A_ID = A.A_ID