帮忙写个select语句

ssqtjffcu 2011-04-13 10:51:10

create table T
(
员工号 VARCHAR2(10),
上级 VARCHAR2(10)
)
;

prompt Loading T...
insert into T (员工号, 上级)
values ('1', '2');
insert into T (员工号, 上级)
values ('2', '3');
insert into T (员工号, 上级)
values ('3', null);
insert into T (员工号, 上级)
values ('4', '3');
insert into T (员工号, 上级)
values ('5', '2');
insert into T (员工号, 上级)
values ('6', '7');
insert into T (员工号, 上级)
values ('7', '8');
insert into T (员工号, 上级)
values ('8', null);
insert into T (员工号, 上级)
values ('9', '11');
insert into T (员工号, 上级)
values ('10', '9');
insert into T (员工号, 上级)
values ('11', null);
commit;

上面是一个员工表,表中有一个上级字段,现在我想要一条select 员工号 from t,我要的效果是员工的上级员工必须排在他后面。
如员工1的上级员员为3
那么select 出来的时候员工3必须在员工1的后面
...全文
191 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yejihui9527 2011-04-13
  • 打赏
  • 举报
回复
select a.员工号, a.上级
2 from t a, t b
3 where a.上级 = b.员工号(+)
4 order by nvl(b.上级, nvl(a.上级, a.员工号)),
5 to_number(nvl(a.上级, '99')) desc
6 ;

员工号 上级
---------- ----------
11
9 11
10 9
3
4 3
2 3
5 2
1 2
8
7 8
6 7

11 rows selected
yejihui9527 2011-04-13
  • 打赏
  • 举报
回复
select a.员工号, a.上级
2 from t a, t b
3 where a.上级 = b.员工号(+)
4 order by nvl(b.上级, nvl(a.上级, a.员工号)),
5 to_number(nvl(a.上级, '99')) desc
6 ;

员工号 上级
---------- ----------
11
9 11
10 9
3
4 3
2 3
5 2
1 2
8
7 8
6 7

11 rows selected
yejihui9527 2011-04-13
  • 打赏
  • 举报
回复
select a.员工号, a.上级
from t a, t b
where a.上级 = b.员工号(+)
order by nvl(b.上级, nvl(a.上级, a.员工号)),
to_number(nvl(a.上级, '99')) desc
ssqtjffcu 2011-04-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 minitoy 的回复:]
SQL code
SQL> select *
2 from t a
3 start with a.上级 is null
4 connect by prior a.员工号 = a.上级
5 order by level desc;

员工号 上级
---------- ----------
1 2
5 ……
[/Quote]


厉害啊,应该就是这个效果!谢谢拉!
badboy_playboy 2011-04-13
  • 打赏
  • 举报
回复
2楼的 你哪个语句能查到数据吗?
minitoy 2011-04-13
  • 打赏
  • 举报
回复
SQL> select *
2 from t a
3 start with a.上级 is null
4 connect by prior a.员工号 = a.上级
5 order by level desc;

员工号 上级
---------- ----------
1 2
5 2
6 7
10 9
2 3
4 3
9 11
7 8
3
11
8

11 rows selected

SQL>
minitoy 2011-04-13
  • 打赏
  • 举报
回复
SQL> select *
2 from t a
3 start with not exists (select 1 from t b where a.员工号 = b.上级)
4 connect by prior a.上级 = a.员工号;

员工号 上级
---------- ----------
1 2
2 3
3
10 9
9 11
11
4 3
3
5 2
2 3
3
6 7
7 8
8

14 rows selected

SQL>
sasamao 2011-04-13
  • 打赏
  • 举报
回复
select t.員工,t.上級 from T t where t.上級 = t.員工
minitoy 2011-04-13
  • 打赏
  • 举报
回复
意思就是逆向排序了?等级最低的员工排到最前面?

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧