SQL MSSQL Abfrage Zeilen zu Spalten

keren

Cadet 4th Year
Registriert
Mai 2008
Beiträge
126
Ich habe eine Tabelle in folgendem Format:

Kundennr | Zusatzid
1 | 17
1 | 21
2 | 5
2 | 17
2 | 21
3 | 23
4 | 17

brauche als Ergebnis der Abfrage aber
Kundennr | Zusatzid 1 | Zusatzid 2 | Zusatzid 3
1 | 17 | 21 | Null
2 | 5 | 17 | 21
3 | 23 | Null | Null
4 | 17 | Null | Null

Die Anzahl der möglichen Zusatzids liegt max bei 6. Hat irgendwer eine Idee wie die Abfrage aussieht? Schonmal danke im Vorraus.
 
Hi,

hast du Google mal bemüht? Ich find's ja immer lustig: Ich suche mit genau deinem Threadtitel und finde sofort innerhalb von 5 Sekunden eine Lösung zu fast genau dem Problem, sogar in mehrfacher Ausführung.

Sollte aber in jedem Fall den richtigen Denkanstoß geben.

VG,
Mad
 
das ist ein gutes beispiel für die grenzen von sql. klasischerweise löst mal solche dinge multidimensional, nicht relational. alternativ per sql fällt mit auf die schnelle nur was mit unterabfragen und programmierlogik ein, mengenorientiert wüßte ich spantan nichts.
 
Danke Madman, den Thread hatte ich über google auch schon gefunden.
Die Tabelle ist allerdingers sehr groß und das mehrfache select dadurch nicht optimal (wenn man bei dem Problem noch davon sprechen kann).
Versuche gerade den ansatz mit der Pivot funktion in SQL. Habe damit aber keinerlei Erfahrung.
 
Ok das mit dem Pivot klappt. Für die Vollständigkeit hier die Abfrage:

select kundenr, [17] as id17 , [21] as id21 , [5] as id5 , [23] as id23
from (select kundennr,zusatzid from tabelle) as quelle
PIVOT
(count(zusatzid) FOR zusatzid IN ([17],[21],[5],[23]))

Das Ergebnis lautet dann:
Kundennr | id17 | id21 | id5 | id23
1 | 1 | 1 | 0 | 0
2 | 1 | 1 | 1 | 0
3 | 0 | 0 | 0 | 1
4 | 1 | 0 | 0 | 0

Sehr gut für die weitere true/false Auswertung :-)
Zu beachten ist noch , dass die Datenbank mindestens 2005 Kompatibel eingestellt sein muss.
 
Zurück
Oben