2012-06-08 59 views
0

我有兩個具有相同模式的表。我想要創建所有字段的聯合,但是我想根據某些(但不是全部)字段的相等來排除重複。在SQL Server(2008r2)中實現這一點的最佳方式是什麼?在SQL Server中,創建不包含部分重複項的聯合查詢的最佳方法是什麼

I see this sort of answer,但有沒有更好的選擇?

感謝您的任何幫助。

+0

你能舉一個你想要的例子嗎? – Lamak

+0

任何人都不能提供答案。向我們展示一些示例數據和預期輸出。 – Thomas

+0

比方說,你有兩個表: 答:市,省,郵編,職業 B:市,省,郵編,職業 你想獲得一套獨特的所有城市,州,兩個表中的拉鍊組合: 選擇城市,州,郵編從A 工會 選擇城市,州,郵編從B UNION的默認行爲是消除重複的行。你想對職業數據做什麼? – Tim

回答

1

您可以使用RANK()函數來完成它,不過@Tim說它只會放棄分區中未使用的所有字段中的任何差異。在下面,如果你有六行B和C的共同點,那麼無論列A和D的值如何,只有其中的一行能夠存活:

SELECT * 
FROM (
    SELECT A, B, C, D, 
     RANK() OVER(PARTITION BY B, C ORDER BY B, C) AS MYRANK  
    FROM (
     SELECT A, B, C, D 
     FROM TABLE_A 
     UNION 
     SELECT A, B, C, D 
     FROM TABLE_B 
    ) T1 
WHERE T1.MYRANK = 1 
+0

+1。可能希望使用'row_number()'而不是'rank()',因爲如果B和C重複,rank將返回相同的值。 –

+0

很好,@NikolaMarkovinović! –

相關問題