Contexte
Il s'agit de la construction de certaines vues que nous utiliserons pour les rapports.
J'ai une table des emplacements, les champs clés étant "emplacement" et "parent" .
La structure que ces deux champs créent, au niveau du niveau, est dans le sens de Nom de l'entreprise -> Nom du campus -> Nom du bâtiment -> Nom de l'étage -> Nom de la pièce. Le nom de l'entreprise reste le même et le nom du campus reste le même dans ce cas.
La structure des emplacements ressemble généralement à ceci:
+-----------+
| Org. Name |
+-----+-----+
|
+-----v-----+
+--------------------+|Campus Name|+---+--+-------------+
| +--+--------+ | |
| | | |
| | | |
+--+-----+ +------+-+ +--+----+ +---+---+
+--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds|
| +--------+ | +--------+ +-------+ +-------+
+-+------+ +-----+--+
|Floor-01| |Basement+-------+
+-+------+ +--------+ |
| |
| |
| +----------+ +-------+--+
+-+Room 1-001| |Room B-002|
+----------+ +----------+
Chaque emplacement renvoie à son emplacement parent, qui est finalement le nom de l'organisation. Actuellement, il n'y a qu'une seule organisation et un seul campus.
Buts
- J'aimerais pouvoir interroger tous les emplacements situés sous un emplacement donné au niveau "Bâtiment". C'est ainsi que je peux retourner des choses comme le nombre de commandes de travail ont été effectuées pour n'importe quel emplacement dans un bâtiment donné.
- J'aimerais pouvoir déterminer quel sous-emplacement appartient à quel bâtiment . Essentiellement l'inverse; Je voudrais passer de n'importe quel niveau en dessous du niveau du bâtiment et remonter jusqu'à ce qu'est le bâtiment.
- Je voudrais que ce soit en vue . Cela signifie que j'aimerais avoir un tableau qui, pour chaque élément du niveau "bâtiment", répertorie le bâtiment dans la colonne de gauche et tous les emplacements possibles SOUS ce bâtiment dans la colonne de droite. De cette façon, j'aurais une liste que je pourrais interroger à tout moment pour trouver quels emplacements font partie de quel bâtiment.
Tentatives et bien faire les choses
J'ai essayé de le faire à travers des vues horriblement construites, des requêtes UNION, etc. - qui ont toutes semblé être une mauvaise idée. Je sais qu'Oracle possède un mécanisme pour cela via "CONNECT BY"; Je ne sais tout simplement pas comment l'utiliser.
NULL
pour eux? Comment identifiez-vous un «niveau de bâtiment»?Réponses:
FrusteratedWithFormsDesigner a la bonne direction (+1). Voici ce que je pense que vous recherchez spécifiquement.
La vue atteint les trois objectifs. Vous pouvez l'interroger pour un bâtiment pour trouver tout ce qu'il contient et vous pouvez l'interroger pour un sous-emplacement pour trouver dans quel bâtiment il se trouve.
Si vous ne voulez pas compter le bâtiment lui-même comme l'un des sous-emplacements, vous pouvez encapsuler la requête existante dans une seule qui élimine les entrées dans lesquelles le bâtiment et la sous-localisation sont identiques.
la source
CONNECT BY
est la bonne façon de gérer les données naturellement récursives.Je ne sais pas à quoi ressemble votre table mais peut-être quelque chose comme:
Cela devrait obtenir des nœuds sous "BLDG-01".
La
START WITH
clause est votre cas de base.Une autre explication (à part celle d'Oracle que je suppose que vous avez déjà lu et avec laquelle vous avez eu des problèmes, elle est probablement très concise):
http://www.adp-gmbh.ch/ora/sql/connect_by.html
Également:
http://psoug.org/reference/connectby.html
Et:
http://www.oradev.com/connect_by.jsp
la source
Je ne suis pas sûr de bien comprendre votre question, mais peut-être quelque chose comme ça:
Cela vous montrera la hiérarchie pour chaque emplacement
la source