日期:2014-05-17  浏览次数:20938 次

与表关联进行行转列
目前有这一需求

表 t_temp_01

f_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 进行关联后就无法实现了。
 

------解决方案--------------------
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&nb