oracle 層次化查詢(行政區劃三級級聯)

來源:互聯網
上載者:User

前提:
資料庫表DM_xzqh範例(部分): 複製代碼 代碼如下:DM MC
230000 黑龍江省
230100 哈爾濱市
230101 市轄區
230102 道裡區
232700 大興安嶺
230103 南崗區
230104 道外區
230108 平房區
230109 松北區
230110 香坊區
230111 呼蘭區
230112 阿城區
230123 依蘭縣
238000 農墾分局
230124 方正縣
230125 賓縣
230126 巴彥縣
230127 木蘭縣
230128 通河縣
230129 延壽縣
230182 雙城市
230183 尚志市

現在將上面的行政區劃按代碼分為三個層級:省(後四位為0)/市(後兩位為0)/縣,同時分別標出他們的層級,這樣的話,便於後期根據不同的層級查詢。

首先,根據上面表拓展出新的一行sjbm,該行用於表示該行政區劃所屬的上級行政區劃。具體代碼如下: 複製代碼 代碼如下:select t.dm,t.mc,case
when substr(t.dm,3)='0000' then 1
when substr(t.dm,5)='00' then to_number(substr(t.dm,1,2)||'0000')
when substr(t.dm,5)!='00' then to_number(substr(t.dm,1,4)||'00')
else 0
end sjbm from dm_xzqh t

結果如下:
序號 DM MC SJBM
1 230000 黑龍江省 1
2 230100 哈爾濱市 230000
3 230101 市轄區 230100
4 230102 道裡區 230100
5 232700 大興安嶺 230000
6 230103 南崗區 230100
7 230104 道外區 230100
8 230108 平房區 230100
9 230109 松北區 230100
10 230110 香坊區 230100
11 230111 呼蘭區 230100
12 230112 阿城區 230100
13 230123 依蘭縣 230100
14 238000 農墾分局 230000
15 230124 方正縣 230100
16 230125 賓縣 230100
17 230126 巴彥縣 230100
18 230127 木蘭縣 230100
19 230128 通河縣 230100
20 230129 延壽縣 230100
21 230182 雙城市 230100
22 230183 尚志市 230100
然後,就可以利用oracle的層次關係將該查詢出的資料分級了,具體代碼如下: 複製代碼 代碼如下:select level,dm,mc,sjbm from
(select t.dm,t.mc,case
when substr(t.dm,3)='0000' then 1
when substr(t.dm,5)='00' then to_number(substr(t.dm,1,2)||'0000')
when substr(t.dm,5)!='00' then to_number(substr(t.dm,1,4)||'00') end sjbm from dm_xzqh t)
[where level=2 ]--該條件陳述式用於查詢具體的每一個層級的行政區劃
start with sjbm=1
connect by prior dm=sjbm
[order by level];

結果如下:
序號 level DM MC SJBM
1 1 230000 黑龍江省 1 //省 ,level->1
2 2 230100 哈爾濱市 230000//市,level->2
3 3 230101 市轄區 230100//縣,level->3
4 3 230102 道裡區 230100
5 3 230103 南崗區 230100
6 3 230104 道外區 230100
7 3 230108 平房區 230100
8 3 230109 松北區 230100
9 3 230110 香坊區 230100
10 3 230111 呼蘭區 230100
11 3 230112 阿城區 230100
12 3 230123 依蘭縣 230100
13 3 230124 方正縣 230100
14 3 230125 賓縣 230100
15 3 230126 巴彥縣 230100
16 3 230127 木蘭縣 230100
17 3 230128 通河縣 230100
18 3 230129 延壽縣 230100
19 3 230182 雙城市 230100
20 3 230183 尚志市 230100
21 3 230184 五常市 230100
22 2 232700 大興安嶺地區 230000

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.