2016-04-08 5 views
0

У меня есть 3 таблицы A, B и C, как показано ниже.Внутреннее объединение 3 таблиц с числом строк

A B C

всех 3 таблицы имеют общую CUST_ID колонку. А таблицы A и B имеют 2 общих столбца CUST_ID и A_ID. Я должен отобразить NAME из таблицы C, граф Test_ID из таблицы B для каждого CUST_ID и START и END из таблицы A. Ожидаемый результат таблицы, как,

R

Я попытался inner join как,

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 

но его предоставление всего 7 строк. Как отобразить счет Test_ID для восточного CUST_ID и отобразить его всего в 4 строках, как показано в таблице ожидаемых результатов?

ответ

3

Попробуйте

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

Вы должны использовать подзапрос, чтобы получить контрольные пересчеты в таблице B, и присоединиться к этой таблице вместо присоединения B непосредственно:

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 
Смежные вопросы