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

Werte einer Spalte in unterschiedlichen Spalten ausgeben

Dieses Thema im Forum "PostgreSQL" wurde erstellt von danschna, 6 November 2017.

  1. danschna

    danschna Benutzer

    Hallo zusammen,

    für die erfahrenen SQL-Experten ist es wahrscheinlich eine triviale Frage, aber wie kann ich die Werte einer Spalte in getrennten Spalten ausgeben?

    so nach dem Motto:
    WENN SpalteA=Wert1
    DANN Wert1 as NeuerWert
    SONST Wert1 as NeuerWert1

    danke und grüße
     
  2. ukulele

    ukulele Datenbank-Guru

    Code:
    SELECT
    (CASE WHEN SpalteA=Wert1 THEN Wert1 ELSE NULL END) AS NeuerWert,
    (CASE WHEN SpalteA=Wert1 THEN NULL ELSE Wert1 END) AS NeuerWert1
    FROM tabelle
    Mit CASE kannst du alles bauen und auch alle Spalten "auftrennen". Das Beispiel scheint mir jetzt wenig Sinn zu ergeben aber es gibt durchaus viele Anwendungsfälle für Ähnliches.
     
    danschna gefällt das.
  3. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# create table danschna( id int primary key, val int);
    CREATE TABLE
    test=*# insert into danschna values (1,1);
    INSERT 0 1
    test=*# insert into danschna values (2,2);
    INSERT 0 1
    test=*# insert into danschna values (3,3);
    INSERT 0 1
    test=*# select * from danschna ;
     id | val
    ----+-----
      1 |  1
      2 |  2
      3 |  3
    (3 Zeilen)
    
    test=*# select id, case when val = 1 then val else null end as wert1, case when val = 2 then val else null end as wert2, case when val = 3 then val else null end as wert3 from danschna ;
     id | wert1 | wert2 | wert3
    ----+-------+-------+-------
      1 |  1 |  |   
      2 |  |  2 |   
      3 |  |  |  3
    (3 Zeilen)
    
    test=*#
    
     
  4. danschna

    danschna Benutzer

    Dankeschön,
    ich habe es mit case realisiert, funktioniert soweit auch gut, jetzt habe ich aber das Problem, dass er für jeden Case eine neue Zeile anlegt.
    Ich hätte das aber gerne in einer Zeile zusammengefasst.
    Ergebnis momentan:


    # Typ val1 val2
    1 A | 49
    2 A | | 12

    Ich hätte aber gerne:

    # Typ val1 val2
    1 A | 49 | 12
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Du hast also:

    Code:
    test=*# select * from dana;
     typ | val
    -----+-----
     1a  |  49
     2a  |  12
    (2 Zeilen)
    
    test=*#
    
    
    und bekommst:

    Code:
    test=*# select typ, case when typ='1a' then val else null end as val1, case when typ = '2a' then val else null end as val2 from dana ;
     typ | val1 | val2
    -----+------+------
     1a  |  49 |   
     2a  |  |  12
    (2 Zeilen)
    
    korrekt?

    Wenn Du das zusammenfassen willst, dann geht die Information über den Typ flöten:

    Code:
    test=*# select sum(case when typ='1a' then val else null end) as val1, sum(case when typ = '2a' then val else null end) as val2 from dana ;
     val1 | val2
    ------+------
      49 |  12
    (1 Zeile)
    
     
  6. danschna

    danschna Benutzer

    Nein, hab ich falsch formuliert:
    select distinct abteilung,
    (CASE WHEN gewichtung='1' THEN count(gewichtung) ELSE NULL END) Gewichtung1,
    (CASE WHEN gewichtung='2' THEN count(gewichtung) END) Gewichtung2,
    (CASE WHEN gewichtung='3' THEN count(gewichtung) END) Gewichtung3 -- (personen_kontonr)

    jetzt bekomme ich konkret folgende Ausgabe:

    abteilung | gewichtung1 | gewichtung2 | gewichtung3
    -------------+------------------+-------------------+-----------------
    a | 49 | |
    a | | 12

    ich möchte aber
    abteilung | gewichtung1 | gewichtung2 | gewichtung3
    -------------+------------------+-------------------+-----------------
    a | 49 | 12 |

    :)
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Dann summieren und nach der Abteilung gruppieren.
     
    danschna gefällt das.
  8. danschna

    danschna Benutzer

    Also war mein Problem, dass ich statt sum count eingesetzt habe?
    Danke auf jeden Fall :)
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Kommt drauf an, was genau du machen willst. Geht es denn nun wie gewollt?
     
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