Oracle
 sql >> Base de données >  >> RDS >> Oracle

pivot ne fonctionne pas lors de l'utilisation d'une sélection imbriquée dans SQL

Vous ne pouvez pas ajouter directement des expressions dynamiques en tant qu'entrée au tableau croisé dynamique, vous pouvez essayer quelque chose comme ceci où nous récupérons toutes les colonnes de la table dans une variable via un bloc PL/SQL, puis la transmettons d'une manière à l'attendu par l'Oracle Fonctionnalité de tableau croisé dynamique.

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;
    /