2016-07-30 41 views
1

我在我的數據庫中的兩個表組合兩個表中的SQL Server

Winners表:

Count Country 
-------------------- 
5  Hungary 
2  Ireland 
1  Italy 
3  Netherlands 

RunnerUp表:

Count  Country 
---------------------- 
1   Italy 
3   Netherlands 
2   Spain 

如何合併這兩個表的樣子這個:

Country  Winners RunnerUp 
-------------------------------- 
Hungary  5   0 
Ireland  2   0 
Italy   1   1 
Netherlands 3   3 
Spain   0   2 
+0

您可以連接表的變化名稱列計數使用計數作爲優勝者和計數作爲RunnerUp – surfmuggle

回答

1

使用聯盟

Select Country , Sum(Winners) as Winners, Sum(RunnerUp) as RunnerUp 
FROM 
(
Select Count as Winners , 0 as RunnerUp, Country from Winners 
Union ALL 
Select 0 as Winners , Count as RunnerUp, Country from RunnerUp 
) a 
Group By Country 
0

你要找的結構是一個full outer join

SELECT   COALESCE([winners].[country], [runnerup].[country]) AS country, 
       COALESCE([winners].[count], 0) AS winners, 
       COALESCE([runnerup].[count], 0) AS runnerup 
FROM   [winners] 
FULL OUTER JOIN [runnerup] ON [winners].[country] = [runnerup].[country] 
+0

這不會爲沒有任何勝利和亞軍,沒有任何勝利的球隊工作。 – objectNotFound

0

我會使用EXISTS來確定使用case語句在你的選擇有相關子查詢,以顯示什麼價值對於一個國家來說(如果它不存在,則爲0)。

東西沿着這些路線:

SELECT 
    countries.Country, 
    CASE 
     WHEN EXISTS(SELECT Winners.Country 
        FROM Winners 
        WHERE countries.Country = Winners.Country) 
      THEN (SELECT SUM(Count) 
       FROM Winners 
       WHERE countries.Country = Winners.Country) 
     ELSE 0 
    END AS Winners, 
    CASE 
     WHEN EXISTS(SELECT RunnerUp.Country 
        FROM RunnerUp 
        WHERE countries.Country = RunnerUp.Country) 
      THEN (SELECT SUM(Count) 
       FROM RunnerUp 
       WHERE countries.Country = RunnerUp.Country) 
     ELSE 0 
    END AS RunnerUp 
FROM 
    (SELECT Country FROM Winners 
    UNION 
    SELECT Country FROM RunnerUp) as countries 

我工會的國名這樣的成績有所有國家無論他們是否出現在兩臺表所示。在THEN部分case語句中的SELECT聲明只能返回單個值,所以我使用了sum()聚合。這樣,如果由於某種原因,一個國家不止一次出現在同一張桌子上,我會在兩次中獲得總額。

0

簡單和 - 更重要的是 - 符合標準的,而不是像未在已具有完整功能的RDBMS需要COALESCE()在胡說八道功能依賴:

CREATE TABLE RESULTS(COUNTRY, WINNERS, RUNNER_UP) PRIMARY KEY(COUNTRY); 

INSERT INTO RESULTS 
SELECT W.COUNTRY, W.COUNT AS WINNERS 
FROM WINNERS W 
INNER JOIN ON W.COUNTRY = R.COUNTRY 
SELECT R.COUNTRY, R.COUNT AS RUNNER_UP 
FROM RUNNERS_UP R; 
+1

如果沒有人向你指出這個資源,下面是一些信息來更好地設置你的答案格式:[如何使用Markdown或HTML格式化我的帖子](http://stackoverflow.com/help/formatting) – sstan