没有DELETE的重复数据删除记录

时间:2012-02-16 16:19:59

标签: sql sql-server deduplication

我只需要从SQL Server中的重复行中带回一条记录

我有这样的数据

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

这些行显示为由同一个人订购的2个项目,实际上它们只是篮子中选择的数量和2个记录。

我的问题是如何只检索其中一行?

由于

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

通过这种方式,您不仅可以获得两行中的一行,还可以获得订购数量

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

答案 2 :(得分:2)

使用Max可以获得最新的订单

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

OR

使用Min将获得第一笔订单

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

答案 3 :(得分: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