1. ホーム
  2. sql

[解決済み] パーティション関数 COUNT() DISTINCTでOVER可能

2022-11-06 20:54:55

質問

異なるNumUsersのランニングトータルを取得するために、以下のように書こうとしています。

NumUsers = COUNT(DISTINCT [UserAccountKey]) OVER (PARTITION BY [Mth])

Management Studioは、このことをあまり快く思っていないようです。このエラーは DISTINCT キーワードを削除するとエラーはなくなりますが、その場合、個別のカウントにはなりません。

DISTINCT はパーティション関数内では不可能なようです。 識別カウントを見つけるにはどうしたらよいでしょうか。もっと 伝統的な メソッドを使用しますか?

もう少し調べてみると、おそらくこれらの OVER 関数が Oracle とは異なる動作をするため、これらの関数を SQL-Server で使用できないという点で異なります。

ここにライブの例を追加しました。 SQLfiddle で、パーティション関数を使用して合計を計算する例を追加しました。

どのように解決するのですか?

非常に簡単な解決策があります。 dense_rank()

dense_rank() over (partition by [Mth] order by [UserAccountKey]) 
+ dense_rank() over (partition by [Mth] order by [UserAccountKey] desc) 
- 1

これはまさにあなたが求めていたものを与えてくれるでしょう。各月における個別のUserAccountKeyの数です。