Sql 你知道,但是无论是什么东西都会使用这个函数来处理结果中可变数量的列吗?这很好,但令人沮丧的是,我的公司不允许出于任何原因编写自定义函数。不过我会尝试利用pivot函数做一些东西。这很好,但令人沮丧的是,我的公司不允许出于任何原因编写自定义函数。不过,我会尝

Sql 你知道,但是无论是什么东西都会使用这个函数来处理结果中可变数量的列吗?这很好,但令人沮丧的是,我的公司不允许出于任何原因编写自定义函数。不过我会尝试利用pivot函数做一些东西。这很好,但令人沮丧的是,我的公司不允许出于任何原因编写自定义函数。不过,我会尝,sql,oracle,pivot,listagg,Sql,Oracle,Pivot,Listagg,你知道,但是无论是什么东西都会使用这个函数来处理结果中可变数量的列吗?这很好,但令人沮丧的是,我的公司不允许出于任何原因编写自定义函数。不过我会尝试利用pivot函数做一些东西。这很好,但令人沮丧的是,我的公司不允许出于任何原因编写自定义函数。不过,我会尝试利用pivot函数制作一些东西。 SELECT t155.text as "155", sys_xmlagg(xmlelement(col, t455.text || ',')).extract('/ROW


你知道,但是无论是什么东西都会使用这个函数来处理结果中可变数量的列吗?这很好,但令人沮丧的是,我的公司不允许出于任何原因编写自定义函数。不过我会尝试利用pivot函数做一些东西。这很好,但令人沮丧的是,我的公司不允许出于任何原因编写自定义函数。不过,我会尝试利用pivot函数制作一些东西。
SELECT t155.text  as "155",
       sys_xmlagg(xmlelement(col, t455.text || ',')).extract('/ROWSET/COL/text()')
                 .getclobval() as "455"
  FROM myTable t155
  JOIN myTable t455
    ON t155."doc-nr" = t455."doc-nr"
 WHERE t155.code = '155'
   AND t455.code = '455'
 GROUP BY t155.text
CREATE OR REPLACE FUNCTION Get_Pivoted_Cols RETURN SYS_REFCURSOR IS
  v_recordset SYS_REFCURSOR;
  v_sql       VARCHAR2(32767);
  v_cols1     VARCHAR2(32767);
  v_cols2     VARCHAR2(32767);  
BEGIN
  SELECT LISTAGG( ''''||rn||''' AS "'||rn||'"' , ',' ) WITHIN GROUP ( ORDER BY text ),
         LISTAGG( 'MAX("'||rn||'") AS "'||rn||'"' , ',' ) WITHIN GROUP ( ORDER BY text )
    INTO v_cols1, v_cols2
    FROM 
    ( SELECT code||'_'||ROW_NUMBER() OVER (PARTITION BY doc_nr, code ORDER BY text) AS rn, t.*
        FROM tab t );

  v_sql :='SELECT '||v_cols2||
          '  FROM
             (
              SELECT code||''_''||ROW_NUMBER() OVER (PARTITION BY doc_nr, code ORDER BY text) AS rn, t.*
                FROM tab t 
             )
            PIVOT
            (
             MAX(text) FOR rn IN ( '|| v_cols1 ||' )
            )
            GROUP BY doc_nr';            

  OPEN v_recordset FOR v_sql;
  DBMS_OUTPUT.PUT_LINE(v_sql);
  RETURN v_recordset;
END;
SELECT MAX("155_1") AS "155_1", 
       MAX("455_1") AS "455_1", 
       MAX("455_2") AS "455_2", 
       MAX("455_3") AS "455_3"
  FROM
  (
   SELECT code||'_'||ROW_NUMBER() OVER (PARTITION BY doc_nr, code ORDER BY text) AS rn, 
          t.*
     FROM tab t 
  )
  PIVOT
  (
   MAX(text) FOR rn IN ( '155_1' AS "155_1", '455_1' AS "455_1", '455_2' AS "455_2", 
                         '455_3' AS "455_3" )
  )
  GROUP BY doc_nr;
VAR rc REFCURSOR
EXEC :rc := Get_Pivoted_Cols;
PRINT rc