0

これを示すクエリがあります...

salesPersonId Total
------------- -----------
AB4           3
GT10          2
JB9           1
JS1           2
KT8           4
TC3           4
VG7           2
WC2           7

(8 row(s) affected)

私の質問は...

SELECT so.salesPersonId, COUNT(so.orderId) AS 'Total'
FROM salesOrder AS so

GROUP BY so.salesPersonId
GO

私はこれをやりたかった...

SELECT so.salesPersonId, COUNT(so.orderId) AS 'Total'
FROM salesOrder AS so
WHERE MAX(COUNT(so.orderId))
GROUP BY so.salesPersonId
GO

これは私にエラーを与えます、最高の合計を持つsalesPersonIdだけを表示する方法についてのアイデアはありますか?これがWC2です。

4

2 に答える 2

1
WITH totalCount
AS
(
    SELECT so.salesPersonId, COUNT(so.orderId) AS 'Total'
    FROM salesOrder AS so
    GROUP BY so.salesPersonId
),
maxCount AS
(
    SELECT salesPersonId, Total,
            DENSE_RANK() OVER (ORDER BY Total DESC) rn
    FROM totalCount
)
SELECT salesPersonId, Total
FROM    maxCount
WHERE rn = 1
于 2012-11-26T03:11:58.317 に答える
1

共通テーブル式(またはサブクエリ)を使用して内訳を取得し、CTE内の合計が最大合計に等しいすべてのエントリを選択できます(複数ある場合があるため)。

;WITH TotalOrders
AS
    (
    SELECT so.salesPersonId, COUNT(so.orderId) AS 'Total'
    FROM salesOrder AS so
    GROUP BY so.salesPersonId
    )
SELECT *
FROM TotalOrders [TO]
WHERE [TO].Total = (SELECT MAX([TO].Total) FROM TotalOrders [TO])
于 2012-11-26T03:12:07.547 に答える