2016-12-07 77 views
0

我在SQL Server的新手,需要一些幫助約聯接查詢有3個表:SQL Server的左連接3臺

Table A:      Table B:    Table C: 

ID   Name    ID  Qty   ID  Qty 
======  ======   ====== ======   ====== ====== 
1   Name 1    1  10    1  20 
2   Name 2    1  20 
3   Name 3    2  15 
4   Name 4    3  25 

我想我需要做一個LEFT JOIN,但我的代碼沒有按」不像是會工作:

SELECT 
    A. NAME, 
    SUM(B.Qty) AS QtyB, 
    SUM(C.QTY) AS QtyC 
FROM 
    Table_A A 
LEFT JOIN 
    Table_B B ON A.ID = B.ID 
LEFT JOIN 
    Table_C C ON A.ID = C.ID 
GROUP BY 
    A. NAME 

結果:

Name  QtyB  QtyC 
======  ===== ====== 
Name 1  30  40 
Name 2  15  Null    
Name 3  25  Null    
Name 4  Null  Null    

我在做什麼錯在這裏?提前致謝。

+2

你是什麼意思是 「不行」 嗎? –

+0

您的預期輸出是什麼,如果不是您當前的結果已經有了什麼? –

+0

工作但結果具有多個值table_C – sezame

回答

-1

編輯:Gordon Linoff的答案以更好的方式解決了這個問題。

如果您希望使用0而不是NULL,那麼可以使用ISNULL函數來翻譯它。

SELECT 
    A.NAME, 
    ISNULL(SUM(B.Qty),0) AS QtyB, 
    ISNULL(SUM(C.QTY),0) As QtyC 
FROM 
    Table_A A 
LEFT JOIN 
    Table_B B ON A.ID = B.ID 
LEFT JOIN 
    Table_C C ON A.ID = C.ID 
GROUP BY 
    A.NAME 

這當然取決於你期望的輸出是什麼(我正在等待響應)。

+0

問題在於由於加入(表B中ID爲1的2條記錄)導致表C上的數量相乘 – JanR

+0

@JanR感謝您的澄清,我錯過了這一點。我的查詢然後解決了錯誤的問題! – bbrumm

+0

不用擔心,問題不是很明確 – JanR

3

問題是,JOIN乘以行。一種解決方案是預先聚集在尺寸上:

SELECT A.NAME, QtyB, SUM(C.QTY) As QtyC 
FROM Table_A A LEFT JOIN 
    (SELECT B.ID, SUM(B.Qty) AS QtyB 
     FROM Table_B B 
     GROUP BY B.ID 
    ) B 
    ON A.ID = B.ID LEFT JOIN 
    Table_C C 
    ON A.ID = C.ID 
GROUP BY A.NAME; 
+0

謝謝戈登,它的工作很好。沒有多個值顯示像我的第一個查詢。 – sezame

0

試試這個,GROUP BY名稱是糟糕的想法(因爲名稱可以相同),

declare @TableA table(ID int,Name varchar(50)) 
insert into @TableA values  
(1,'Name 1')  
,(2,'Name 2')  
,(3,'Name 3')  
,(4,'Name 4')  


declare @TableB table(ID int,Qty int ) 
insert into @TableB values 
(1 , 10 )  
,(1, 20) 
,(2, 15) 
,(3, 25) 

    declare @TableC table(ID int, Qty int) 
insert into @TableC values (1 ,20 ) 

;With CTE as 
(
select a.id,sum(b.Qty)BQTY,sum(c.Qty)CQty 
FROM @TableA A 
left join @TableB B on a.ID=b.ID 
left join @tableC C on a.id=c.id 
group by a.id 
) 
select a.Name,bqty,cqty from cte c 
inner join @TableA A on c.id=a.id