Задний план
Это для построения некоторых представлений, которые мы будем использовать для отчетов.
У меня есть таблица местоположений, ключевые поля которых "местоположение" и "родитель" .
Структура, которую создают эти два поля, по уровням, соответствует названиям компании -> название кампуса -> название здания -> название этажа -> название комнаты. Название компании остается прежним, а название Campus в этом случае остается прежним.
Структура локаций обычно выглядит так:
+-----------+
| Org. Name |
+-----+-----+
|
+-----v-----+
+--------------------+|Campus Name|+---+--+-------------+
| +--+--------+ | |
| | | |
| | | |
+--+-----+ +------+-+ +--+----+ +---+---+
+--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds|
| +--------+ | +--------+ +-------+ +-------+
+-+------+ +-----+--+
|Floor-01| |Basement+-------+
+-+------+ +--------+ |
| |
| |
| +----------+ +-------+--+
+-+Room 1-001| |Room B-002|
+----------+ +----------+
Каждое местоположение ссылается на свое родительское местоположение, которое в конечном итоге является названием организации. В настоящее время существует только одна организация и один кампус.
цели
- Я хотел бы иметь возможность запрашивать все местоположения ниже любого данного местоположения на уровне "здания". Это так, что я могу вернуть такие вещи, как, сколько рабочих заказов было выполнено для любого места в данном здании.
- Я хотел бы иметь возможность определить, какое подразделение принадлежит какому зданию . По сути наоборот; Я хотел бы перейти с любого уровня ниже уровня здания и проследить, что это за здание.
- Я хотел бы, чтобы это было в поле зрения . Это означает, что я хотел бы иметь таблицу, в которой для каждого элемента на уровне «здания» перечислены здания в левом столбце и все возможные местоположения ниже этого здания в правом столбце. Таким образом, у меня был бы список, к которому я мог бы обратиться в любое время, чтобы найти, какие места являются частью какого здания.
Попытки и правильные поступки
Я пытался сделать это с помощью ужасно сконструированных представлений, запросов UNION и т. Д., Которые кажутся плохой идеей. Я знаю, что Oracle обладает механизмом для этого через «CONNECT BY»; Я просто не уверен, как это использовать.
NULL
для них? Как вы определяете «уровень здания»?