SQL Server 2012组仅由一列组成

时间:2012-12-29 16:03:51

标签: sql sql-server

我只需要分组一列

SQL Server 2012查询:

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

结果是:

enter image description here

正如您所看到的,有OrderId列重复值。

可以工作,但它按OrderId,Status,DateEdit进行分组,但我需要的是OrderId在结果中是唯一的,我可以使用以下内容:

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

2 个答案:

答案 0 :(得分:4)

您必须使用statusDateEdited的聚合函数来为每个分组的ORDERID获取不同的valeus。你也可以使用排名功能这样做:

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。但是,对于每个分组DateEdited,要返回哪种状态和ORDERID

答案 1 :(得分: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 包含它不在那里 去那样的功能。 :)