请教SQL

[复制链接]
查看11 | 回复5 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
表记录

id parent_idmenu_name
-------------------------------------
10
海南
20
广东
32
广州
41
海口
51
三亚
想得到的结果
id parent_idmenu_name
------------------------------------
1 0
海南
4 1
海口
5 1
三亚
2 0
广东
3 2
广州
[ 本帖最后由 willin 于 2011-1-12 15:44 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层

如何提问先看看“http://www.itpub.net/thread-1348543-1-1.html”


回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
不知道lz具体要求。 可以用order by case 来排序得到结果
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
WITH temp AS (
SELECT 1 ID, 0 parent_id, '海南' menu_name FROM dual
UNION ALL
SELECT 2 ID, 0 parent_id, '广东' menu_name FROM dual
UNION ALL
SELECT 3 ID, 2 parent_id, '广州' menu_name FROM dual
UNION ALL
SELECT 4 ID, 1 parent_id, '海口' menu_name FROM dual
UNION ALL
SELECT 5 ID, 1 parent_id, '三亚' menu_name FROM dual
)
SELECT ID, parent_id, menu_name FROM (
SELECT t.*, SYS_CONNECT_BY_PATH(to_char(t.ID, '0000000000'), '-') x
FROM temp t
START WITH t.parent_id = 0
CONNECT BY PRIOR ID = parent_id
)
ORDER BY x, id
[ 本帖最后由 3833020 于 2011-1-12 17:55 编辑 ]
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
create table t_city
(id number,
parent_id number,
menu_name varchar2(20)
)
insert into t_city values (1,0,'海南');
insert into t_city values (2,0,'广东');
insert into t_city values (3,2,'广州');
insert into t_city values (4,1,'海口');
insert into t_city values (5,1,'三亚');

select * from t_city start with parent_id=0 connectby parent_id=prior id

IDPARENT_IDMENU_NAME

1
0
海南

4
1
海口

5
1
三亚

2
0
广东

3
2
广州
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
order siblings by
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行