私はこれを書き、Oracleで正常に実行しました
COUNT (DISTINCT APEC.COURSE_CODE) OVER (
PARTITION BY s.REGISTRATION_NUMBER
,APEC.APE_ID
,COV.ACADEMIC_SESSION
) APE_COURSES_PER_ACADEMIC_YEAR
SQL Serverで同じ結果を達成しようとしています(ソースデータベースはOracleを使用していますが、ウェアハウスはSQL Serverを使用しています)。
SQL Server 2008のウィンドウ関数ではこの区別がサポートされていないことを知っています-誰かが代替案を提案できますか?
これが私が最近出会ったものです。私はこれからそれを得ました 投稿 。これまでのところ、それは私にとって本当にうまくいきます。
DENSE_RANK() OVER (PARTITION BY PartitionByFields ORDER BY OrderByFields ASC) +
DENSE_RANK() OVER (PARTITION BY PartitionByFields ORDER BY OrderByFields DESC) - 1 AS DistinctCount
残念ながら、SQLServerではcount(distinct) over
を実行できません。これはサブクエリで実行できます。アイデアは、各コースコード内の値を列挙することです(そして他の分割条件に従います)。次に、シーケンス番号が1の値をカウントアップします。
_select sum(case when cc_seqnum = 1 then 1 else 0 end) as APE_COURSES_PER_ACADEMIC_YEAR
from (select . . . ,
row_number () OVER (PARTITION BY s.REGISTRATION_NUMBER, APEC.APE_ID,
COV.ACADEMIC_SESSION,
APEC.COURSE_CODE
ORDER BY (SELECT NULL)
) as cc_seqnum
from . . .
) t
_
複雑なクエリがあります。 count(distinct)
をrow_number()
に置き換えて、現在のクエリを最終クエリのサブクエリまたはCTEにすることをお勧めします。