2016-09-13 34 views
4

我寫下面的查詢來檢索重複的客戶在SQL Server中使用Row_Number()。如何獲取包含SQL Server中第一行號的重複行?

Cust_PKID ---------------+ CustomerID ----------------- + MobileNo 
1      | A00001      | 9000477444 
2      | A00002      | 9000477444 
3      | A00003      | 9000477444 

查詢: -

Select TMP.CustID 
From 
(
    Select CustomerID CustID, 
     Row_Number() Over(Partition By MobileNo Order By (Select Null)) As RowNo 
    From dbo.Customers 
) TMP 
Where TMP.RowNo > 1 

輸出: -

Cust_PKID ---------------+ CustomerID ----------------- + MobileNo  
2      | A00002      | 9000477444 
3      | A00003      | 9000477444 

我怎樣才能檢索到的記錄,包括在SELECT語句中第一RowNo記錄?

+0

單一的選擇不可能的,你必須使用函數/子查詢和它總是select語句 –

回答

3

您正在尋找COUNT() OVER()窗口功能不ROW_NUMBER

Select TMP.CustID 
From 
(
    Select CustomerID CustID, 
     COUNT(1) Over(Partition By MobileNo) As RowNo 
    From dbo.Customers 
) TMP 
Where TMP.RowNo > 1 

這將使所有重複MobileNo記錄

+0

以上查詢需要更多時間來執行。客戶表中有近1000萬條記錄。我爲該表創建了適當的索引。以前我已經使用Group By with Count(*)查詢。它也需要更多時間來執行。 – RGS

+0

在哪個列上有索引。它被使用了嗎? –

+0

我在Customers表中有MobileNo,CustomerID的索引。 – RGS

相關問題