0

1 列だけでグループ化する必要がある

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

グループ化されたごとに異なる値を取得するには、statusとの集計関数を使用する必要があります。ランキング関数を使用して、次のようにすることもできます。DateEditedORDERID

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ですか?

于 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 に答える