Latar Belakang
Ini untuk pembuatan beberapa tampilan yang akan kami gunakan untuk pelaporan.
Saya memiliki tabel lokasi, bidang kunci adalah "lokasi" dan "induk" .
Struktur yang dibuat oleh kedua bidang ini, berdasarkan level, ada di sepanjang baris Nama Perusahaan -> Nama Kampus -> Nama Bangunan -> Nama Lantai -> Nama Kamar. Nama perusahaan tetap sama dan nama Kampus tetap sama dalam hal ini.
Struktur lokasi umumnya terlihat seperti ini:
+-----------+
| Org. Name |
+-----+-----+
|
+-----v-----+
+--------------------+|Campus Name|+---+--+-------------+
| +--+--------+ | |
| | | |
| | | |
+--+-----+ +------+-+ +--+----+ +---+---+
+--+| BLDG-01|+--+ | BLDG-02| |BLDG-03| |Grounds|
| +--------+ | +--------+ +-------+ +-------+
+-+------+ +-----+--+
|Floor-01| |Basement+-------+
+-+------+ +--------+ |
| |
| |
| +----------+ +-------+--+
+-+Room 1-001| |Room B-002|
+----------+ +----------+
Setiap lokasi terhubung kembali ke lokasi induknya, yang pada akhirnya adalah nama organisasi. Saat ini, hanya ada satu organisasi dan satu kampus.
Tujuan
- Saya ingin dapat menanyakan semua lokasi di bawah lokasi tertentu di tingkat "Bangunan". Ini agar saya dapat mengembalikan hal-hal seperti berapa banyak pekerjaan yang telah dilakukan untuk setiap lokasi dalam suatu bangunan.
- Saya ingin dapat menentukan sub-lokasi mana yang termasuk dalam bangunan mana . Pada dasarnya kebalikannya; Saya ingin pergi dari level mana saja di bawah level gedung dan menelusuri kembali ke apa bangunan itu.
- Saya ingin ini dilihat . Itu berarti, saya ingin memiliki tabel yang untuk setiap item di tingkat "bangunan", daftar bangunan di kolom sebelah kiri dan semua lokasi yang mungkin di bawah bangunan di kolom sebelah kanan. Dengan cara ini saya memiliki daftar yang dapat saya tanyakan kapan saja untuk menemukan lokasi mana yang merupakan bagian dari bangunan mana.
Mencoba dan Melakukannya dengan Benar
Saya telah berusaha melakukan ini melalui pandangan yang dibangun dengan mengerikan, pertanyaan UNION, dll - yang semuanya tampak seperti ide yang buruk. Saya tahu Oracle memiliki mekanisme untuk ini melalui "CONNECT BY"; Aku hanya tidak yakin bagaimana memanfaatkannya.
NULL
untuk mereka? Bagaimana Anda mengidentifikasi "tingkat bangunan"?Jawaban:
FrusteratedWithFormsDesigner memiliki arah yang benar (+1). Inilah yang saya pikir Anda cari secara spesifik.
Pandangan ini mencapai ketiga tujuan. Anda dapat meminta itu untuk bangunan untuk menemukan semua yang ada di dalamnya dan Anda dapat meminta itu untuk sub-lokasi untuk menemukan di mana bangunan itu berada.
Jika Anda tidak ingin menghitung bangunan itu sendiri sebagai salah satu sub-lokasi, Anda dapat membungkus kueri yang ada di salah satu entri menghilangkan di mana bangunan dan sublokasi adalah sama.
sumber
CONNECT BY
adalah cara yang benar untuk menangani data yang rekursif secara alami.Saya tidak tahu seperti apa meja Anda tetapi mungkin seperti:
Ini harus mendapatkan node di bawah "BLDG-01".
The
START WITH
klausul adalah kasus dasar Anda.Penjelasan lain (selain dari Oracle yang saya anggap sudah Anda baca dan bermasalah, mungkin sangat singkat):
http://www.adp-gmbh.ch/ora/sql/connect_by.html
Juga:
http://psoug.org/reference/connectby.html
Dan:
http://www.oradev.com/connect_by.jsp
sumber
Saya tidak yakin saya mengerti pertanyaan Anda sepenuhnya, tetapi mungkin sesuatu seperti ini:
Ini akan menunjukkan kepada Anda hierarki untuk setiap lokasi
sumber