Zeilen als Spalten in Ergebnismenge
Michael Preez
- datenbank
0 Ilja
Sers!
Auf meinem MS SQLSERVER habe ich eine Datantenbank mit zwei Tabellen die miteinander verknüpft sind. Zu einem Eintrag in Tabelle A können jedoch nicht mehr als 5 Einträge in Tabelle B bestehen. Wenn ich nun die Referenzen abfrage, würde ich bei ja in den die Spalten der Tabelle A mehrfach angezeigt bekommen. Beispiel:
Tabelle A hat als Primärschlüßel KundenID und eine weitere Spalte Name.
Tabelle B hat als Fremdschlüßel KundenID aus Tabelle A und als weitere Spalte Auftrag.
Was ich möchte ist das die KundenID in der Ergebnismenge nicht mehrfach ausgegeben wird, sondern nur einmal. Also nicht 5Spalten mit KundenID "1" und dann die unterschiedlichen Aufräge daneben usw.
Statt dessen möchte ich immer 5 weitere Auftrag-Spalten die dann ggf. <null>-Marken haben, falls kein 3.,4. oder 5. Auftrag exisitiert.
Michael
yo,
Was ich möchte ist das die KundenID in der Ergebnismenge nicht mehrfach ausgegeben wird, sondern nur einmal. Also nicht 5 Spalten
mit KundenID "1" und dann die unterschiedlichen Aufräge daneben usw.
das kommt ganz drauf an, wie du die ergebnisliste weiter bearbeitest. mir fallen spontan vier möglichkeiten ein.
1. dir steht eine programmiersprache zur verfügung. dann liesse sich die gewünschte ausgabe dadurch erzeugen. dies per SQL abfrage zu tun, ist der schlechtere weg, wenn auch machbar.
2. wenn du sowieso eine maximal feste anzahl von aufträgen pro kunde hast (sehr unwahrscheinlich), dann kannst du auch einfach die zweite tabelle auflösen und jeweils 5 weitere spalten in der ersten tabelle erzeugen. dies ist zwar nicht ganz konform dem normalisierungs-prozess, aber sie wissen was sie tun.
3. wenn du die zwei tabellen behalten willst und auch keine programmiersprache anwendung findet, kann man es noch durch unterabfragen erreichen. in deinem fall beschränkst du dich aber wie bei punkt 2. auf eine feste anzahl von aufträgen.
SELECT kunden_id, (Unterabfrage 1. auftrag), (Unterabfrage 2. auftrag), (Unterabfrage 3. auftrag)...
FROM kunden_tabelle
WHERE kundennummer = xy;
4. ähnlich wie drei, nur du benutzt anstelle einer festen anzahl eine variable unter mssql, die sich solange ums eins erhöht, bis die anzahl der aufträge erreicht ist. bei jedem durschlauf wird eine entsprechende unterabfragen hinzugefügt, die unter der verwendung von TOP die jeweilige auftragsnummer ausgibt. nach der schleife fühst du die zusammengebastelte sql anweisung aus. bin mir nicht sicher, ob das unter mssql möglich ist. aber das wäre die allgemeine lösung, ohne zu wiessen, wieviele aufträge es gibt.
Ilja