1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Windows Funktion für COUNT DISTINCT

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Datenbank-Neuling, 16 Juli 2019.

  1. 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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    CD soll das Ziel sein? Wie kommst Du auf gerade 7, wo doch die Antwort auf alle Fragen 42 ist?
     
    Walter gefällt das.
  3. Sorry, meinte eher ein COUNTROWS DISTINCT auf zwei Spalten .
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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?
     
  5. ukulele

    ukulele Datenbank-Guru

    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)))
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden