Count (Distinct ([value)) ÜBER (Partition by) in SQL Server 2008
Ich habe dies geschrieben und erfolgreich ausgeführt Oracle
COUNT (DISTINCT APEC.COURSE_CODE) OVER (
PARTITION BY s.REGISTRATION_NUMBER
,APEC.APE_ID
,COV.ACADEMIC_SESSION
) APE_COURSES_PER_ACADEMIC_YEAR
Ich versuche zu erreichen das gleiche Ergebnis in SQL Server (unsere Quelle-Datenbank verwendet Oracle aber unser Lager verwendet SQL Server).
Ich weiß, die distinct wird nicht unterstützt mit window-Funktionen in SQL Server 2008 - kann jemand eine alternative vorschlagen?
- Auf der dba-Website Sie verwenden Können, COUNT DISTINCT mit einem OVER-Klausel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, was ich kam vor kurzem across ein. Ich habe es von dieser post. Also es läuft bisher wirklich gut für mich.
NULL
Werte, in der Erwägung, dassCOUNT()
nicht.Ach, das können Sie nicht
count(distinct) over
im SQL-Server. Sie können dies tun mit einer Unterabfrage. Die Idee ist, auflisten der Werte innerhalb der einzelnen Kurs-code (und vorbehaltlich der anderen Partitionierung Bedingungen). Dann zählen Sie doch mal die Werte, wo die Sequenz-Nummer ist 1:Haben Sie eine komplexe Abfrage. Ich würde vorschlagen, Sie ersetzen die
count(distinct)
mit derrow_number()
und machen Sie Ihren aktuellen Abfrage eine Unterabfrage oder CTE für die endgültige Abfrage.