我只需要分组一列
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
答案 0 :(得分:4)
您必须使用status
和DateEdited
的聚合函数来为每个分组的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 包含它不在那里 去那样的功能。 :)