0
私はすでに1日ごとに分割されたビューを持っています(下のクエリのByDay)。グループ化とランキングを組み合わせる正しい方法は何ですか?
今、キャンペーンが収益を生み出しているキャンペーンのトップ10に含まれている場合、結果に行が含まれるようにフィルタリングします。
私は欲しいものを手に入れましたが、私はプロセスでそれを行うために明白な方法をスキップするかもしれないと感じました。
WITH T AS (
SELECT
ByDay.[Day]
,ByDay.[Campaign Name]
,ByDay.[Revenue USD]
FROM ByDay
WHERE ByDay.[Period]='Mar 2012'
),
TT AS (
SELECT
ByDay.[Campaign Name]
,SUM(ByDay.[Revenue USD]) [Sum Revenue USD]
FROM ByDay
WHERE ByDay.[Period]='Mar 2012'
GROUP BY ByDay.[Campaign Name]
)
SELECT * FROM (
SELECT
T.[Day]
,T.[Campaign Name]
,T.[Revenue USD]
,TT.[Sum Revenue USD]
,DENSE_RANK() OVER(ORDER BY TT.[Sum Revenue USD] DESC) AS R
FROM T
INNER JOIN TT ON T.[Campaign Name]=TT.[Campaign Name]
) TTT
WHERE R < 11
ORDER BY R
これほど簡単な方法はありますか?
おかげで - 今、私のクエリはかなり論理的に読み込み、 –