我有兩個具有相同模式的表。我想要創建所有字段的聯合,但是我想根據某些(但不是全部)字段的相等來排除重複。在SQL Server(2008r2)中實現這一點的最佳方式是什麼?在SQL Server中,創建不包含部分重複項的聯合查詢的最佳方法是什麼
I see this sort of answer,但有沒有更好的選擇?
感謝您的任何幫助。
我有兩個具有相同模式的表。我想要創建所有字段的聯合,但是我想根據某些(但不是全部)字段的相等來排除重複。在SQL Server(2008r2)中實現這一點的最佳方式是什麼?在SQL Server中,創建不包含部分重複項的聯合查詢的最佳方法是什麼
I see this sort of answer,但有沒有更好的選擇?
感謝您的任何幫助。
您可以使用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
+1。可能希望使用'row_number()'而不是'rank()',因爲如果B和C重複,rank將返回相同的值。 –
很好,@NikolaMarkovinović! –
你能舉一個你想要的例子嗎? – Lamak
任何人都不能提供答案。向我們展示一些示例數據和預期輸出。 – Thomas
比方說,你有兩個表: 答:市,省,郵編,職業 B:市,省,郵編,職業 你想獲得一套獨特的所有城市,州,兩個表中的拉鍊組合: 選擇城市,州,郵編從A 工會 選擇城市,州,郵編從B UNION的默認行爲是消除重複的行。你想對職業數據做什麼? – Tim