1

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

我有这样的数据

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

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

我的问题是我怎样才能只检索这些行之一?

谢谢

4

4 回答 4

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
于 2012-02-16T16:25:55.357 回答
4

这样,您不仅可以获得两行之一,还可以获得订购的数量

SELECT 
   CustomerID, ProductID, Title, max(OrderID) as orderID, COUNT(*) as quantity
FROM 
  TableName 
GROUP BY 
   CustomerID, 
   ProductID, 
   Title 
于 2012-02-16T16:28:28.693 回答
2

使用 Max 将为您提供最新的订单

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

或者

使用 Min 将为您带来第一笔订单

SELECT CustomerID, MIN(OrderId), ProductID, Title
FROM table
GROUP BY CustomerID, ProductID, Title
于 2012-02-16T16:24:21.447 回答
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
于 2012-02-16T16:21:47.830 回答