目前有这一需求表 t_temp_01f_categoryid    f_categoryname    f_parentid     f_level
0                root             -1               0
1                结点               0                1
2                子结点             1                2表 t_temp_02
f_id    f_name   f_categoryid(与表 t_temp_01关联)
10      测试       2
11      名字       1如何把这二张表显示成f_id    f_name  f_categoryname1  f_categoryname2 f_categoryname3
10      测试      子结点              结点              root
11      名字                          结点              root
SELECT * FROM (
SELECT f_categoryname,f_level 
FROM   t_temp_01
START WITH f_level<9 CONNECT BY PRIOR F_CATEGORYID = F_PARENTID  ) t  
PIVOT(MAX(f_categoryname) FOR f_level IN (0 p1,1 p2,2 p3));
这样好像只能把 t_temp_01 这张表进行行转列,但与 t_temp_02 进行关联后就无法实现了。
 

解决方案 »

  1.   

    with t as
     (select t2.f_id, t2.f_name, t1.lev, t1.f_categoryname
        from (select CONNECT_BY_ROOT(t1.f_categoryid) root,
                     (t1.f_level - 3) * -1 lev,
                     t1.f_categoryname
                from t_temp_01 t1
              connect by t1.f_categoryid = prior t1.f_parentid) t1,
             t_temp_02 t2
       where t1.root = t2.f_categoryid)
    select *
      from t pivot(max(f_categoryname) for lev in('1' f_categoryname1,
                                                  '2' f_categoryname2,
                                                  '3' f_categoryname3));