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

Windows Funktion für COUNT DISTINCT

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

  1. Datenbank-Neuling

    Datenbank-Neuling Aktiver Benutzer

    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. Datenbank-Neuling

    Datenbank-Neuling Aktiver Benutzer

    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