2012-02-16 75 views
1

我需要帶回只有一條記錄從複製的行中的SQL Server重複數據刪除記錄,而不刪除

我有這樣

------------------------------------------- 
CustomerID, OrderID, ProductID, Title 
------------------------------------------- 
1,1001,131,orange 
1,1002,131,orange 
------------------------------------------- 

這些行的數據顯示爲2項已由同一人訂購,實際上它們只是籃子和2條記錄中選擇的數量的兩倍。

我的問題是如何檢索這些行中只有一個?

感謝

回答

5

也許是這樣的:

首先是一些測試數據:

DECLARE @tbl TABLE(CustomerID INT,OrderID INT,ProductID INT,Title VARCHAR(100)) 

INSERT INTO @tbl 
VALUES 
    (1,1001,131,'orange'), 
    (1,1002,131,'orange') 

那麼查詢

;WITH CTE AS 
(
    SELECT 
     ROW_NUMBER() OVER(PARTITION BY tbl.CustomerID,tbl.ProductID,tbl.Title 
       ORDER BY tbl.OrderID) AS RowNbr, 
     tbl.CustomerID, 
     tbl.OrderID, 
     tbl.ProductID, 
     tbl.Title 
    FROM 
     @tbl AS tbl 
) 
SELECT 
    * 
FROM 
    CTE 
WHERE 
    CTE.RowNbr=1 
+0

我不認爲這會達到預期的結果。由於您正在按每一列進行分區,因此'iRank'將始終*爲'1'。修正您的示例數據(例如,將第二個'OrderID'更改爲'1002',以匹配OP在問題中的含義),您會明白我的意思。 – 2012-02-16 16:29:05

+2

+1這樣一個快速恢復。 – 2012-02-16 16:30:24

+0

當第一條記錄的標準變得複雜且涉及許多字段和計算時,這是一個非常好的策略。 – JeffO 2012-02-16 16:32:02

1

,只要它是你想要的,你可以得到使用分組和MIN函數(MAX會給你最後的順序)具有相同的客戶,產品和標題每個訂單的第一順序真的是什麼:

SELECT CustomerID, MIN(OrderID) AS OrderID, ProductID, Title 
FROM MyTable 
GROUP BY CustomerID, ProductID, Title 

如果你想重複訂單的數量(這將是訂購數量由您的問題來看),您可以添加計數:

SELECT CustomerID, MIN(OrderID) AS OrderID, ProductID, Title, 
    COUNT(*) AS Quantity 
FROM MyTable 
GROUP BY CustomerID, ProductID, Title 
2

基於M斧頭將讓你在最近的訂單

SELECT CustomerID, MAX(OrderId), ProductID, Title 
FROM table 
GROUP BY CustomerID, ProductID, Title 

OR

使用敏將讓你一階

SELECT CustomerID, MIN(OrderId), ProductID, Title 
FROM table 
GROUP BY CustomerID, ProductID, Title 
+0

這不行。訂單ID是不同的。 – PHeiberg 2012-02-16 16:25:06

+0

啊,你說得對。我的眼睛在戲弄我。 – Taryn 2012-02-16 16:25:51

4

這樣你就可以得到的,不僅是兩行之一,而且訂購的數量

SELECT 
    CustomerID, ProductID, Title, max(OrderID) as orderID, COUNT(*) as quantity 
FROM 
    TableName 
GROUP BY 
    CustomerID, 
    ProductID, 
    Title