Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Die Namen der Mitarbeiter müssen spaltenweise nach ihrer Stadt angeordnet werden

Leider ist das, was Sie versuchen, nicht möglich, zumindest nicht in "gerade" SQL - Sie würden dynamisches SQL oder einen zweistufigen Prozess benötigen (im ersten Schritt wird eine Zeichenfolge generiert, die eine neue SQL-Anweisung ist). Kompliziert.

Das Problem ist, dass Sie keine feste Liste von Städtenamen (als Zeichenfolgenliterale) einfügen. Sie versuchen, Spalten basierend auf dem zu erstellen, woher Sie kommen (wählen Sie die Stadt aus den Mitarbeitern). Daher ist die Anzahl der Spalten und der Name der Spalten nicht bekannt, bis die Oracle-Engine die Daten aus der Tabelle liest, aber bevor die Engine startet, muss sie bereits wissen, was alle Spalten sein werden. Widerspruch.

Beachten Sie auch, dass Sie, wenn dies möglich wäre, fast sicher möchten (wählen Sie eindeutig Stadt von Mitarbeitern).

HINZUGEFÜGT:Das OP stellt eine Folgefrage in einem Kommentar (siehe unten).

Die ideale Anordnung ist, dass sich die Städte in ihrer eigenen, kleineren Tabelle befinden und die „Stadt“ in der Tabelle „Employees“ eine Fremdschlüsselbeschränkung hat, damit die Sache mit der „Stadt“ verwaltet werden kann. Sie möchten nicht, dass ein Personalsachbearbeiter nach New York, ein anderer nach New York City und ein dritter nach NYC für dieselbe Stadt einreist. Versuchen Sie auf die eine oder andere Weise zuerst Ihren Code, indem Sie die Unterabfrage, die dem Operator IN in der Pivot-Klausel folgt, einfach durch die durch Kommas getrennte Liste von Zeichenfolgenliteralen für die Städte ersetzen:... IN ('DFW', 'CH', „NY“). Beachten Sie, dass die Reihenfolge, in der Sie sie in diese Liste einfügen, der Reihenfolge der Spalten in der Ausgabe entspricht. Ich habe nicht die gesamte Abfrage überprüft, um festzustellen, ob es andere Probleme gibt. versuchen Sie es und lassen Sie uns wissen, was passiert.

Viel Glück!