我這個問題的理解是,你有兩個表(A
和B
),它具有完全相同的列。你想把這些表UNION
整合到一個數據集中,但是有時你在兩個表中有「匹配」的行。在這種情況下,您只能根據某個優先級選取其中一行。
從你的例子似乎..
- 比賽:當
ID
是一樣的發生。
- 優先級:基於
Type
列,按照字母順序排列優先。
另外我假設SQL Server,因爲這是我喜歡的,你沒有說。
希望這一切是正確的..現在,這裏是我將如何處理它。
我首先執行兩張表的UNION
。記錄所有記錄,而不用擔心匹配,將它們放入臨時表中以備後用。
SELECT ID, Balance, Type, CCY, Payment, Final_Balance
INTO #AllRecords
FROM A
UNION
SELECT ID, Balance, Type, CCY, Payment, Final_Balance
FROM B
接下來,我會GROUP BY
了決定比賽的字段,然後用MIN
或MAX
獲得優先列的正確值。通過我對你的問題的理解,這意味着..
SELECT ID, MIN(Type) AS Type
FROM #AllRecords
GROUP BY ID
隨着該查詢你現在對所有要在最終結果中顯示的記錄的自然鍵。剩下要做的就是使用這些鍵查找其餘列,我們可以通過將該查詢用作子查詢來完成此操作。
SELECT ID, Balance, Type, CCY, Payment, Final_Balance
FROM #AllRecords r
INNER JOIN (
SELECT ID, MIN(Type) AS Type
FROM #AllRecords
GROUP BY ID) final ON r.ID = final.ID AND r.Type = final.Type
所以一起生成的查詢是..
SELECT ID, Balance, Type, CCY, Payment, Final_Balance
INTO #AllRecords
FROM A
UNION
SELECT ID, Balance, Type, CCY, Payment, Final_Balance
FROM B
SELECT ID, Balance, Type, CCY, Payment, Final_Balance
FROM #AllRecords r
INNER JOIN (
SELECT ID, MIN(Type) AS Type
FROM #AllRecords
GROUP BY ID) final ON r.ID = final.ID AND r.Type = final.Type
請不要使用不適用於您的問題標籤。我刪除了數據庫標記,因爲它不清楚你實際使用了哪一個。請添加*標籤*您實際使用的數據庫 –
謝謝我只在問題的底部使用了推薦的標籤。可能對您最好聯繫Stackoverflow,並要求他們修改它們,除非聯繫每個人,否則這是您花時間做的事情。 – Carlos80
@ Carlos80:不可以。Stackoverflow建議*可能匹配的標籤。它無法知道您正在使用的DBMS。它只能建議最有可能的。所以:這是什麼? MySQL的? PostgreSQL的? SQL Server?甲骨文? ...瞭解DBMS以便給出適當的答案非常重要。 –