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

Merkmalsvergleich innerhalb Gruppe über mehrere Zeilen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von hooolla, 20 Juli 2020.

  1. hooolla

    hooolla Neuer Benutzer

    Hallo zusammen,

    ich in absoluter Neuling in SQL und stehe gerade vor einem Problem, dessen Lösung sich mir nicht erschließt.

    Ich habe eine Datenbank mit Abonnements zu Kunden, die als gekündigt oder aktiv dargestellt werden. Das Problem ist nun, dass ein Kunde mehrere Abonnements haben kann, von denen einige aktiv, andere wiederum gekündigt sind.

    Jede Zeile beschreibt ein Abonnement. Ich muss nun die Kunden identifizieren, die NUR gekündigte haben. Besteht die Möglichkeit zunächst die einzelnen Kunden zusammenzufassen und dann zu prüfen, ob etwas anderes als Kündigungen vorliegen?

    Zur Veranschaulichung:

    Abo1 aktiv Kunde 1
    Abo2 gekündigt Kunde 1
    Abo3 gekündigt Kunde 1
    Abo1 aktiv Kunde 2
    Abo1 gekündigt Kunde 3

    Als Ergebnis würde hier dann nur Kunde 3 erwartet.

    Vorab vielen Dank für eure Hilfe.

    Viele Grüße
    Hooolla
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from hoolla ;
     abo | kunde | aktiv
    -----+-------+-------
       1 |     1 | t
       2 |     1 | f
       3 |     1 | f
       1 |     2 | t
       1 |     3 | f
    (5 rows)
    
    test=*# with temp as (select kunde, count(abo) abos, count(aktiv) filter (where aktiv) as aktiv from hoolla group by kunde) select * from temp;
     kunde | abos | aktiv
    -------+------+-------
         3 |    1 |     0
         2 |    1 |     1
         1 |    3 |     1
    (3 rows)
    
    test=*# with temp as (select kunde, count(abo) abos, count(aktiv) filter (where aktiv) as aktiv from hoolla group by kunde) select * from temp where abos = aktiv;
     kunde | abos | aktiv
    -------+------+-------
         2 |    1 |     1
    (1 row)
    
    test=*#
    
    Ist jetzt aber PostgreSQL, aber Du siehst den Weg?
     
  3. ukulele

    ukulele Datenbank-Guru

    Oder Selfjoin
    Code:
    SELECT    t1.kunde
    FROM    tabelle t1
    LEFT JOIN tabelle t2
    ON        t1.kunde = t2.kunde
    AND        t2.status = 'aktiv'
    WHERE    t2.kunde IS NULL
     
  4. hooolla

    hooolla Neuer Benutzer

    Noch bin ich nicht ganz bei euch aber vielen lieben Dank schon mal für eure Hilfe. Das Beispiel von akretschmer würde nur Kunden mit Status aktiv filtern, ich muss aber genau die finden, die NUR gekündigt sind und keine aktiven Abos mehr haben. Kunden, die beide Stati haben, sind noch aktiv und fallen raus. Ich hab also zu manchen Kunden 10 Abos, davon sind 9 gekündigt, 1 ist aktiv --> Kunde ist aktiv. Wie finde ich nun Kunden raus, die NUR gekündigt sind? Also wie lass ich SQL über x Zeilen eine Kundennummer durchgehen?
     
  5. ukulele

    ukulele Datenbank-Guru

     
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