ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 论坛问题记录

论坛问题记录

原创 Linux操作系统 作者:itpubstream 时间:2009-02-23 19:06:40 0 删除 编辑

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(pathover(partition by id order by lev descfrom (


select connect_by_root id id,level levsys_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博客 ” ,链接:http://blog.itpub.net/15081535/viewspace-557495/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 销售额排名
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2008-08-05

  • 博文量
    9
  • 访问量
    6473