2016-11-15 48 views
0

我的表結構如下SQL選擇重複發生的交易在SQL Server數據庫

id field1 field2 field3 field4 field5 field6 field7 
1 x  10  abc  x  x  x  x 
2 x  10  abc  x1  x6  x2  x2 
3 x  10  xyz  x2  x6  x3  x3 
4 x  20  abc  x3  x7  x4  x4 
5 x  20  abc  x4  x8  x5  x5 
6 x  10  abc  x5  x9  x6  x6 

按我的商務邏輯,IDS 1,2,4,5作爲經常性的訂單,因爲他們在字段1相同的價值觀, field2和field3。我要寫什麼HIGH PERFORMANCE查詢才能檢索那些重複出現的訂單。即,我想輸出如下

id field1 field2 field3 field4 field5 field6 field7 
1 x  10  abc  x  x  x  x 
2 x  10  abc  x1  x6  x2  x2 
4 x  20  abc  x3  x7  x4  x4 
5 x  20  abc  x4  x8  x5  x5 
  1. 沒有訂單號3和6,因爲它們是獨一無二的。
  2. 各個領域的,應在輸出

這相當於識別重複的記錄,但在輸出我想重複和原始記錄。

此外,此表有數百萬條記錄,因此不想使用臨時表和按命令分組。我想我需要使用分區。

感謝您的幫助

回答

1

您可以使用COUNT OVER

WITH Cte AS(
    SELECT *, 
     cnt = COUNT(*) OVER(PARTITION BY field1, field2, field3) 
    FROM tbl 
) 
SELECT 
    id, field1, field2, field3, field4, field5, field6, field7 
FROM Cte 
WHERE cnt > 1 
0
SELECT * FROM #Table T JOIN (SELECT field1 , field2 , field3 
FROM #Table GROUP BY field1 , field2 , field3 HAVING COUNT(*) > 1) A ON A.field1 = T.field1 AND A.field2 = T.field2 AND A.field3 = T.field3