当前位置: 代码迷 >> Oracle技术 >> oracle 行转列的有关问题
  详细解决方案

oracle 行转列的有关问题

热度:69   发布时间:2016-04-24 08:09:13.0
oracle 行转列的问题

怎样将图中的结果显示成这样
220000010000277 负债类 104150002 资产类
做一行显示
------解决方案--------------------
固定的话用:

with t as
 (select 220000010000277 as facctcode, '负债类' as facctclass
    from dual
  union all
  select 104150002 as facctcode, '资产类' as facctclass from dual
  )

select max(decode(facctcode, 220000010000277, facctcode, null)) as col1,
       max(decode(facctcode, 220000010000277, facctclass, null)) as col2,
       max(decode(facctcode, 104150002, facctcode, null)) as col3,
       max(decode(facctcode, 104150002, facctclass, null)) as col4
  from t;


动态的话,推荐外部程序实现。
------解决方案--------------------
引用:
固定的话用:

with t as
 (select 220000010000277 as facctcode, '负债类' as facctclass
    from dual
  union all
  select 104150002 as facctcode, '资产类' as facctclass from dual
  )

select max(decode(facctcode, 220000010000277, facctcode, null)) as col1,
       max(decode(facctcode, 220000010000277, facctclass, null)) as col2,
       max(decode(facctcode, 104150002, facctcode, null)) as col3,
       max(decode(facctcode, 104150002, facctclass, null)) as col4
  from t;


动态的话,推荐外部程序实现。

不用这么麻烦
WITH T AS
 (SELECT 220000010000277 AS FACCTCODE, '负债类' AS FACCTCLASS
    FROM DUAL
  UNION ALL
  SELECT 104150002 AS FACCTCODE, '资产类' AS FACCTCLASS FROM DUAL)
SELECT LISTAGG(T.FACCTCODE 
------解决方案--------------------
 ' ' 
------解决方案--------------------
 FACCTCLASS, ' ') WITHIN GROUP(ORDER BY FACCTCODE)
  FROM T;

------解决方案--------------------
引用:
固定的话用:

with t as
 (select 220000010000277 as facctcode, '负债类' as facctclass
    from dual
  union all
  select 104150002 as facctcode, '资产类' as facctclass from dual
  )

select max(decode(facctcode, 220000010000277, facctcode, null)) as col1,
       max(decode(facctcode, 220000010000277, facctclass, null)) as col2,
       max(decode(facctcode, 104150002, facctcode, null)) as col3,
       max(decode(facctcode, 104150002, facctclass, null)) as col4
  from t;


动态的话,推荐外部程序实现。

似乎楼主不是你这个意思哦
------解决方案--------------------
引用:
多好多记录的,并不是只有这两条记录,不能写死的吧?


with t as
 (select 220000010000277 as facctcode, 'fuzai' as facctclass
    from dual
  union all
  select 104150002 as facctcode, 'zichan' as facctclass from dual
  UNION ALL
    select 13212121 as facctcode, 'zichan' as facctclass from dual
  )
SELECT replace(ltrim(max(SYS_CONNECT_BY_PATH(t1.facctcode
------解决方案--------------------
' '
------解决方案--------------------
t1.facctclass, ',')), ','),',',' ') col 
FROM(SELECT t.*,ROWNUM rn FROM t) t1
START WITH t1.rn=1
CONNECT BY PRIOR t1.rn=t1.rn-1;
  相关解决方案