0

我只需要按一列分组

SQL Server 2012 查询:

SELECT OrderID,Status,DateEdited 
FROM orders 
WHERE Status='Pending' 
GROUP BY OrderID,Status,DateEdited

结果是:

在此处输入图像描述

如您所见,存在重复的OrderId列值。

工作,但它分组,OrderId,Status,DateEdit但我需要的是OrderId结果将是独一无二的,我可以有类似的东西:

SELECT OrderID,Status,DateEdited 
FROM orders 
WHERE Status='Pending' 
GROUP BY OrderID
4

2 回答 2

4

您必须对statusand使用聚合函数DateEdited,以获得每个分组的不同值ORDERID。您还可以使用排名函数这样做:

WITH CTE
AS
(
   SELECT 
     OrderID,
     Status,
     DateEdited,
     ROW_NUMBER() OVER(PARTITION BY OrderID ORDER BY DateEdited DESC) rownum
   FROM orders 
   WHERE Status='Pending'
)
SELECT 
  OrderID,
  Status,
  DateEdited
FROM CTE
WHERE rownum = 1;

这将为您提供不同ORDERID的 s。但是每个分组返回哪个状态和DateEdited返回ORDERID

于 2012-12-29T16:06:23.783 回答
1

然后你可以这样做,

SELECT OrderID,'Pending' as Status,max(DateEdited) 
FROM orders 
WHERE Status='Pending' 
GROUP BY OrderID

如果您不想丢失任何记录,那么您可以使用 GROUP_CONCAT()

SELECT OrderID,'Pending' as Status,GROUP_CONCAT(DateEdited) 
FROM orders 
WHERE Status='Pending' 
GROUP BY OrderID

注意:我不确定你是否在 sqlserver 中使用 GROUP_CONCAT以防它不存在这样的功能。:)

于 2012-12-29T16:06:04.493 回答