Oracle 组值作为列 header

Oracle group value as a column header

我有一个 table,其中我想在 select 中显示为新列的列值。接下来的图片就是我想要的。

我尝试使用“pivot”,但没有用。是否可以使用枢轴函数?

我的查询:

 select m.tmarti  as line, dsmdcp as column, vlmdmn as valuee    
 from TABLE01 m 
--pivot (count(vlmdmn for dsmdcp in ('Cintura', 'Quadril', 'Busto'))
    join TABLE02 t on t.tmarti = m.tmarti
 where cdarti = 2026397 
 order by t.seqtam, dsmdcp;

您可以使用条件聚合来创建 select 语句字符串以在存储函数中动态转换这些列,其中 returns SYS_REFCURSOR 类型的值作为

CREATE OR REPLACE FUNCTION Get_Pivoted_Values RETURN SYS_REFCURSOR IS
  v_recordset SYS_REFCURSOR;
  v_sql       VARCHAR2(32767);
  v_cols      VARCHAR2(32767); 
BEGIN
  SELECT LISTAGG( 'MAX( CASE WHEN column = '''||column||''' THEN valuee END )  
              AS  "'||column||'"' , ',' ) WITHIN GROUP ( ORDER BY dsmdcp )
    INTO v_cols
    FROM ( SELECT DISTINCT dsmdcp
             FROM table02 );
           
  v_sql :=
  'SELECT tmarti,'|| v_cols ||
  '  FROM
     (
      SELECT t1.tmarti AS line, dsmdcp AS column, vlmdmn AS valuee
        FROM table01 t1
        JOIN table02 t2
          ON t2.tmarti = t1.tmarti
     )
    GROUP BY tmarti';

  OPEN v_recordset FOR v_sql;
  RETURN v_recordset;
END;
/

该函数可以从 SQL 开发者控制台调用为

SQL> DECLARE
    result SYS_REFCURSOR;
BEGIN
   :result := Get_Pivoted_Values;
END;
/

SQL> PRINT result;