1:
如何用一个SQL将目录树打横?
有表如下:
ID 名字 父节点ID
-----------------------------
1 A 2
2 B 3
3 C 4
4 D
我要的结果如下:
A B C D
B C D
C D
D
请问如何用一个简单SQL实现
WITH TEMP AS
(
SELECT 1 ID,'A' NAME,2 PARENT FROM DUAL
UNION
SELECT 2 ID,'B' NAME,3 PARENT FROM DUAL
UNION
SELECT 3 ID,'C' NAME,4 PARENT FROM DUAL
UNION
SELECT 4 ID,'D' NAME,NULL PARENT FROM DUAL
)
SELECT REVERSE(NAME) FROM
(
SELECT SYS_CONNECT_BY_PATH(NAME,' ') NAME,LENGTH(SYS_CONNECT_BY_PATH(NAME,' ')) RN FROM TEMP CONNECT BY PARENT = PRIOR ID START WITH PARENT IS NULL
) ORDER BY RN DESC
REVERSE(NAME)
A B C D
B C D
C D
D
下面这个解答看不大懂
drop table test;
create table test(id number,name varchar2(10),fid number);
insert into test values(1,'A',2);
insert into test values(2,'B',3);
insert into test values(3,'C',4);
insert into test values(4,'D',null);
commit;
select distinct first_value(path) over(partition by id order by lev desc) from (
select connect_by_root id id,level lev, sys_connect_by_path(name,' ') path
from test
start with id in (select id from test)
connect by id=prior fid);
---
A B C D
B C D
C D
2:
麻烦大家看一下这个问题的SQL解决思路
目前DB中的结构是这个样子的
部门 顾客代码 类型 金额
10 1001 1 1000
10 1002 2 2000
10 1003 3 3000
20 2001 4 4000
20 2002 5 5000
50 3001 1 1000
50 3002 4 1000
最终想达到这样一个查询的效果,也就是先查询一下DB中的类型都有什么样子的,然后一个部门的情况下对于本部门有的类型就进行正常的显示,没有的者进行0的输出。
下边是预想要的样子
部门 类型 金额
10 1 1000
10 2 2000
10 3 3000
10 4 0
10 5 0
20 1 0
20 2 0
20 3 0
20 4 4000
20 5 5000
50 1 1000
50 2 0
50 3 0
50 4 1000
50 5 0
麻烦大家帮忙看一下,谢谢了
select t.*, nvl(test.tot,0) tot
from
(select deptno, type
from
(select distinct deptno from test) t1,
(select distinct type from test) t2
) t left join test
on t.deptno=test.deptno and t.type=test.type;
deptno type tot
----------------------------
10 1 1000
10 2 2000
10 3 3000
10 4 0
10 5 0
20 1 0
20 2 0
20 3 0
20 4 4000
20 5 5000
50 1 1000
50 2 0
50 3 0
50 4 1000
50 5 0
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15081535/viewspace-557495/
,如需转载,请注明出处,否则将追究法律责任。