2016-12-07 78 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