SQL-Ausgabe in eine Zeile schreiben

Hallo,
ich möchte in einer Zutrittsanlage darstellen, welcher Mitarbeiter welche Zonen-Berechtigung hat. In diesem kleinen Beispiel hat ein Mitarbeiter von 5 möglichen Zonen nur für 3 Zonen eine Berechtigung (Zone 1, 3 und 5).

Der folgende SQL-Script

select dsaemp.emplno as PersNr,
dsaemp.surname as Nachname,
dsaemp.firstname as Vorname,
dsaccess.zoneid as Zone,
dsaccess.accpatid as Muster
from dsaemp, dsaccess
where dsaemp.emplno = ‚000‘ and dsaccess.valid_from = ‚04.02.2005‘

bringt das folgende Ergebnis:

PersNr Nachname Vorname Zone Muster
000 Hosenmatz Horst 1 HaTa
000 Hosenmatz Horst 3 BeTa
000 Hosenmatz Horst 5 HaTa

Wie muß ich das SQL-Script umschreiben, um das folgende Ergebnis zu erhalten?

PersNr Nachname Vorname Zone1 Zone2 Zone3 Zone4 Zone5
000 Hosenmatz Horst HaTa BeTa HaTa

Kannst Du mir mit ein paar Tips oder Hinweisen weiterhelfen?

Vielen Dank
Demi

SELECT Persnr, Nachname, vorname, (Select muster from …) Zone1, (…) Zone2 from …

Wobei Du im inneren Select auf den äußeren über Aliasnamen zugreifen kannst.

Gruß

Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Peter,
wenn ich versuche, Deinem Beispiel zu folgen, bekomme ich schon bei der Unterabfrage von ‚Zone1‘ den Hinweis: ‚Die Unterabfrage gab mehr als einen Wert zurück. Das ist ungültig…‘.

Vielleicht könntest Du Dein Beispiel detailierter darstellen, damit es nicht zu Fehlermeldungen kommt.

Gruß demi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo demi,

sorry, das ist mir zu lang.

Die Fehlermeldung kann zwei Ursachen haben:

  1. In Deiner Tabelle steht an dieser Stelle mehr als ein Datensatz. Du hast mit dem Schlüssel gepfuscht.

  2. Die DB, die Du benutzt, hat bereits erkannt, dass es möglich wäre, dass Du mehr als einen Datensatz bekommst und blockt ab. (Bei Oracle und SQL-Server müsste es funktionieren)

Lösung:

  1. Prüfe Deine Daten - Teste also den Inneren Select.

  2. Du kannst das MAX(feld) abfragen, dann bekommst Du genau einen Wert zurück. Damit hast Du aber nicht den Fehler behoben, sondern dessen Anzeige.

Gruß

Peter

1 Like