2017-02-16 115 views
1

我有3个表SQL服务器:加入3个表和sum()每个表一列

-----------table1------------- 
id code name quantity 
1  001  car1 1 
2  002  car2 2 
3  003  car3 3 

-----------table2------------- 
id code name quantity 
1  001  car1 1 
2  002  car2 2 

-----------table3------------- 
id code name quantity 
1  001  car1 1 
2  002  car2 2 
3  004  car4 4 

我想加盟三个表,并采取总量从数量在SQL Server:

---------table------- 
code name total 
001  car1 3 
002  car2 6 
003  car3 3 
004  car4 4 

在MySQL中我尝试这一点,工作,但在SQL Server中,我得到了我的错误:(

select 
    ID, CODE, NAME, sum(QUANTITY) as total 
from 
    (select ID, CODE, NAME, QUANTITY from AP1 
    union all 
    select ID, CODE, NAME, QUANTITY from AP2 
    union all 
    select ID, CODE, NAME, QUANTITY from AP3) x 
group by ID; 
+2

您可以使用GROUP BY中'SELECT'子句的所有非聚合列,如'group by ID,CODE,NAME'。 –

+0

如果你有时间,给我写个例子,因为我不明白 –

+0

@ConstantinosAggelou - 请看下面的答案。 – GurV

回答

0

你的方法将在任何数据库的工作,如果你的group by域匹配未聚集列:

select CODE, NAME, sum(QUANTITY) as total 
from (select ID, CODE, NAME, QUANTITY from AP1 union all 
     select ID, CODE, NAME, QUANTITY from AP2 union all 
     select ID, CODE, NAME, QUANTITY from AP3 
    ) x 
group by CODE, NAME; 

,它工作在MySQL的事实是由于(MIS)功能,允许在任何select未聚集列聚集查询。通常,其他数据库不支持这种非标准语法。

+0

我在MySQL代码中有一个错误。它的代码不是ID '选择ID,代码,名称,金额(数量)从总 (从AP1工会从AP2联盟所有 选择选择ID,代码,名称,数量都 选择ID,代码,名称,数量ID,CODE,NAME,QUANTITY from AP3 )x group by CODE;' 在MySql中,我为每个CODE取一个唯一的行。 在MSSQL我把重复行 –

+0

非常感谢你:) –