日期:2014-05-16  浏览次数:20869 次

oracle行转列问题
查出的结果为


怎么转换为如下格式:

 377712 105598847.18   46634   8362903.44  1778  2588736.16  6    702.1

  
------解决方案--------------------
WITH T AS
 (SELECT '1' paytype, 377712 cou, 105598.18 su FROM DUAL
  UNION ALL
  SELECT '2' paytype, 46634 cou, 839.02 su FROM DUAL
  UNION ALL
  SELECT '3' paytype, 1778 cou, 25587 su FROM DUAL)
SELECT LTRIM(max(SYS_CONNECT_BY_PATH(T2.cou 
------解决方案--------------------
 ' ' 
------解决方案--------------------
 T2.su, '   ')), '   ') COL
  FROM (SELECT T.*, ROW_NUMBER() OVER(ORDER BY T.paytype) AS RN FROM T) T2
 START WITH RN = 1
CONNECT BY PRIOR RN = RN - 1

------解决方案--------------------
1楼挺好

也可以
select wm_concat(aa)
  from (select *
          from (select paytype 
------解决方案--------------------
 ee aa, paytype
                  from tab
                 where rownum < 50)
         order by paytype)
但是都是有长度限制的。默认逗号分割,也可以用replace,换成别的。

我认为这样的转换最好还是查出后整理的方式,这样更通用。