Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Pivot nie działa podczas korzystania z zagnieżdżonego wyboru w SQL

Nie możesz bezpośrednio dodawać dynamicznych wyrażeń jako danych wejściowych do tabeli przestawnej, możesz spróbować czegoś takiego, w którym pobieramy wszystkie kolumny tabeli w zmiennej za pomocą bloku PL/SQL, a następnie przekazujemy je w sposób oczekiwany przez Oracle Funkcjonalność tabeli przestawnej.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ALTER SESSION SET nls_date_format nie działa w APEX. Działa jednak w SQL Developer

  2. Propagacja transakcji Oracle między C++ a Java

  3. Dlaczego pojawia się błąd ORA-00937

  4. Oracle (0x80004005)ORA-12154:TNS:nie można rozpoznać identyfikatora połączenia

  5. Jak odczytać wszystkie pliki z Oracle Directory za pomocą PL/SQL i zaktualizować kolumnę BLOB?