固定的话用: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;
动态的话,推荐外部程序实现。

解决方案 »

  1.   

    不用这么麻烦
    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;
      

  2.   


    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;
      

  3.   

    select WMSYS.WM_CONCAT(r.字段1||' '|| r.字段2)as str from table r
    如果在意里面的“,” 可以用replace('str',',',' ')函数替换。
      

  4.   

    这个问题比较傻,一般情况下用case when ,在那个类型不多的情况下可以用,
    要是在类型的数目不确定的情况下,没人这么作行转列的,这个设计到数据库设计的问题了
      

  5.   

    要是数据类型有500个,那么按照楼主的要求岂不是要500个列来记录?
    oracle table 能支持这么多的列么?