Oracle
 sql >> Database >  >> RDS >> Oracle

pivot non funziona quando si utilizza una selezione nidificata in SQL

Non puoi aggiungere direttamente espressioni dinamiche come input alla tabella Pivot, puoi provare qualcosa del genere in cui recuperiamo tutte le colonne della tabella in una variabile tramite un blocco PL/SQL e quindi la passiamo in un modo a quello previsto da Oracle Funzionalità tabella pivot.

SET serveroutput ON;


    DECLARE 
    sqlquery VARCHAR(32767);
    cols VARCHAR2(32767);
    BEGIN

      SELECT listagg('''' || column_name || '''',   ',') within
      GROUP(
      ORDER BY column_name)
      INTO cols
      FROM
        (SELECT DISTINCT column_name
         FROM all_tab_columns
         WHERE TABLE_NAME = 'TABLE_NAME')
      ;

      sqlquery := '      
    SELECT * FROM
    (
      SELECT table_name, column_name
      FROM ALL_TAB_COLUMNS
      WHERE
          table_name = ''TABLE_NAME''
    )
    PIVOT
    (
      MIN(column_name)
      FOR column_name IN ( 
            ''||cols||''
        )
      )
      ORDER BY table_name';

      DBMS_OUTPUT.PUT_LINE(sqlquery);

      EXECUTE IMMEDIATE sqlquery;

    END;
    /