Hintergrund
Dies dient zum Erstellen einiger Ansichten, die wir für die Berichterstellung verwenden.
Ich habe eine Tabelle mit Standorten, wobei die Schlüsselfelder "Standort" und "Eltern" sind .
Die Struktur, die diese beiden Felder auf Ebenenebene erstellen, entspricht dem Firmennamen -> Campusname -> Gebäudename -> Etagenname -> Raumname. Der Firmenname bleibt derselbe und der Name des Campus bleibt in diesem Fall derselbe.
Die Struktur der Standorte sieht im Allgemeinen folgendermaßen aus:
+-----------+
| Org. Name |
+-----+-----+
|
+-----v-----+
+--------------------+|Campus Name|+---+--+-------------+
| +--+--------+ | |
| | | |
| | | |
+--+-----+ +------+-+ +--+----+ +---+---+
+--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds|
| +--------+ | +--------+ +-------+ +-------+
+-+------+ +-----+--+
|Floor-01| |Basement+-------+
+-+------+ +--------+ |
| |
| |
| +----------+ +-------+--+
+-+Room 1-001| |Room B-002|
+----------+ +----------+
Jeder Standort ist mit dem übergeordneten Standort verknüpft, der letztendlich der Name der Organisation ist. Derzeit gibt es nur eine Organisation und einen Campus.
Tore
- Ich möchte in der Lage sein, alle Standorte unter einem bestimmten Standort auf der Ebene "Gebäude" abzufragen. Auf diese Weise kann ich beispielsweise zurückgeben, wie viele Arbeitsaufträge für einen Standort innerhalb eines bestimmten Gebäudes ausgeführt wurden.
- Ich möchte feststellen können, welcher Unterort zu welchem Gebäude gehört . Im Wesentlichen das Gegenteil; Ich möchte von jeder Ebene unterhalb der Gebäudeebene zurückgehen und zurückverfolgen, was das Gebäude ist.
- Ich möchte, dass dies in einer Ansicht ist . Das heißt, ich hätte gerne eine Tabelle, in der für jedes Element auf der Ebene "Gebäude" das Gebäude in der linken Spalte und alle möglichen Standorte UNTER diesem Gebäude in der rechten Spalte aufgeführt sind. Auf diese Weise hätte ich eine Liste, die ich jederzeit abfragen könnte, um herauszufinden, welche Standorte zu welchem Gebäude gehören.
Versuche und es richtig machen
Ich habe versucht, dies durch schrecklich konstruierte Ansichten, UNION-Abfragen usw. zu tun - was alles eine schlechte Idee zu sein schien. Ich weiß, dass Oracle durch "CONNECT BY" einen Mechanismus dafür besitzt. Ich bin mir nur nicht sicher, wie ich davon Gebrauch machen soll.
NULL
für sie? Wie identifizieren Sie eine "Gebäudeebene"?Antworten:
FrusteratedWithFormsDesigner hat die richtige Richtung (+1). Hier ist, was ich denke, dass Sie speziell suchen.
Die Ansicht erreicht alle drei Ziele. Sie können es nach einem Gebäude abfragen, um alles zu finden, was es enthält, und Sie können es nach einem Unterort abfragen, um herauszufinden, in welchem Gebäude es sich befindet.
Wenn Sie das Gebäude selbst nicht als einen der Unterorte zählen möchten, können Sie die vorhandene Abfrage in einen einschließen, um Einträge zu eliminieren, bei denen das Gebäude und der Unterort identisch sind.
quelle
CONNECT BY
ist der richtige Weg, um mit Daten umzugehen, die natürlich rekursiv sind.Ich weiß nicht, wie dein Tisch aussieht, aber vielleicht so etwas wie:
Dies sollte Knoten unter "BLDG-01" bekommen.
Die
START WITH
Klausel ist Ihr Basisfall.Eine andere Erklärung (abgesehen von der Oracle-Erklärung, von der ich annehme, dass Sie sie bereits gelesen haben und mit der Sie Probleme hatten, ist sie wahrscheinlich sehr knapp):
http://www.adp-gmbh.ch/ora/sql/connect_by.html
Ebenfalls:
http://psoug.org/reference/connectby.html
Und:
http://www.oradev.com/connect_by.jsp
quelle
Ich bin mir nicht sicher, ob ich Ihre Frage vollständig verstehe, aber vielleicht so etwas:
Dies zeigt Ihnen die Hierarchie für jeden Standort
quelle