Windows Funktion für COUNT DISTINCT

Mr. Robot

Fleissiger Benutzer
Beiträge
88
Hallo SQL Experten :)

Ich möchte gerne ein COUNT DISTINCT auf zwei Spalten anwenden und das Ergebnis über eine Windows Funktion in einer Spalte wiedergeben. Genauer in einer Abbildung z.B. die Spalten CD:

upload_2019-7-16_17-52-24.png

Mit einer Spalte kann ich es wie folgt schaffen:

DENSE_RANK() OVER (ORDER BY Id_2 ASC) +
DENSE_RANK() OVER (ORDER BY Id_2 DESC) - 1 AS CD

Das Ergebnis wäre 3. Wie könnte man es aber lösen wenn noch eine Spalte Id_1 dazu kommt?

Vielen Dank und viele Grüße
Datenbank-Neuling
 
Werbung:
ahhh, jetzt versteh ich, was Du willst:

Code:
test=*# select * from foo;
   c1    | c2
---------+----
 germany | 1
 germany | 1
 germany | 3
 england | 1
 england | 2
 england | 2
 france  | 1
 france  | 2
 france  | 3
(9 rows)

test=*# with bla as (select count(distinct (c1,c2)) from foo) select * from foo cross join (select * from bla) x;
   c1    | c2 | count
---------+----+-------
 germany | 1  |     7
 germany | 1  |     7
 germany | 3  |     7
 england | 1  |     7
 england | 2  |     7
 england | 2  |     7
 france  | 1  |     7
 france  | 2  |     7
 france  | 3  |     7
(9 rows)

test=*#

Okay so?
 
Werbung:
Leider unterstützt MSSQL kein count(DISTINCT spalte) mit mehreren Spalten, geht bei mir jedenfalls nicht. Als schmutzige Lösung könnte man die Spalten verketten, also
count(distinct cast(c1 AS VARCHAR(100)) + cast(c2 AS VARCHAR(100)))
 
Zurück
Oben