Bekomme Abfrage nicht hin: CASE, doppelte Datensätze

PetraSteiner

Fleissiger Benutzer
Beiträge
60
Hallo zusammen,

ich habe folgende Tabellen mit Beispieldaten:
Schüler
- id:1 , Peter
- id:2, Maximilian
- id:4, Jochen
- id:5: Michaela
Klassen
- id 1, 1a
- id 2: 1b
- id 3: 2a
SchülerKlassen (Felder SchülerId, KlassenId)
- 1, 1
- 2, 1
- 4, 2

Jetzt sollte ich eine SQL-Abfrage haben, die mir alle Schüler liefert. Alle Schüler, die in der Klasse 1a sind sollen mit einem extra Feld und dem Wert "x" gekennzeichnet werden.
Also in dem Beispiel:
1, Peter, x
2, Maximilian, x
4, Jochen, null
5, Michaela, null

Ich habe es mit einem case probiert. Aber ich erhalte dann doppelte Datensätze, die ich irgendwie nicht wegbekomme. (Mein Bespiel ist reduziert. Es kann sein, das ein Schüler in mehreren Klassen ist, Jahr 2018 1a, 2019 2a). Benötige ich einen subselect um das zu lösen?

Viele Grüße
Petra
 
Werbung:
Code:
test=*# select s.id, s.name, case when k.name = '1a' then 'x' else null end as "Ist in Klasse 1a" from schueler s left join schueler_klasse sk on s.id=sk.schueler_id left join klassen k on sk.klasse_id=k.id ;
 id |    name    | Ist in Klasse 1a
----+------------+------------------
  1 | Peter      | x
  2 | Maximilian | x
  4 | Jochen     |
  5 | Michaela   |
(4 rows)
 
Vielen Dank für die schnelle Antwort. Soweit war ich mit einem select gar nicht weg.
Das Problem ist nur, dass ich doppelte Einträge habe.
Wenn Peter in der 1a und in der 2a war, wird er zweimal angezeigt. Einmal mit x und einmal ohne.
Ich habe es mit "max" probiert. Aber das scheint nicht zu gehen.
 
Wenn Du jetzt das noch konkret zeigen würdest, hätten möglicherweise andere Leute mit ähnlichen Problemen gleich die Lösung.

Hint: Hier fragen, hier die Lösung dann auch zeigen.
 
Wenn Du jetzt das noch konkret zeigen würdest, hätten möglicherweise andere Leute mit ähnlichen Problemen gleich die Lösung.

Hint: Hier fragen, hier die Lösung dann auch zeigen.
Ja, stimmt:
Code:
select s.id, s.name, max(case when k.name = '1a' then 'x' else null end) as klasse 
from schueler s 
left join schueler_klasse sk on s.id=sk.schueler_id 
left join klassen k on sk.klasse_id=k.id
group by s.id
order by s.id;

Nochmals Danke für die Hilfe.
 
Werbung:
Zurück
Oben