Werte einer Spalte in unterschiedlichen Spalten ausgeben

danschna

Benutzer
Beiträge
17
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
 
Werbung:
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.
 
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=*#
 
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
 
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)
 
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 |

:)
 
Werbung:
Zurück
Oben