2017-02-16 6 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

非常感謝你:) –