Oracle
 sql >> база данни >  >> RDS >> Oracle

Динамична опорна точка в oracle sql

Не можете да поставите динамичен израз в оператора IN на PIVOT, без да използвате PIVOT XML, който извежда малко по-малко от желания резултат. Можете обаче да създадете IN низ и да го въведете в изявлението си.

Първо, ето моята примерна таблица;

  myNumber    myValue myLetter
---------- ---------- --------
         1          2 A        
         1          4 B        
         2          6 C        
         2          8 A        
         2         10 B        
         3         12 C        
         3         14 A      

Първо настройте низа, който да използвате във вашето IN изявление. Тук поставяте низа в "str_in_statement". Използваме COLUMN NEW_VALUE и LISTAGG, за да настроим низа.

clear columns
COLUMN temp_in_statement new_value str_in_statement
SELECT DISTINCT 
    LISTAGG('''' || myLetter || ''' AS ' || myLetter,',')
        WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement 
    FROM (SELECT DISTINCT myLetter FROM myTable);

Вашият низ ще изглежда така:

'A' AS A,'B' AS B,'C' AS C

Сега използвайте израза String във вашата PIVOT заявка.

SELECT * FROM 
    (SELECT myNumber, myLetter, myValue FROM myTable)
    PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));

Ето изхода:

  MYNUMBER      A_VAL      B_VAL      C_VAL
---------- ---------- ---------- ----------
         1          2          4            
         2          8         10          6 
         3         14                    12 

Има ограничения. Можете да конкатенирате само низ до 4000 байта.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо Oracle използва DBMS_STATS.GATHER_TABLE_STATS?

  2. В Oracle възможно ли е да се ВМЕСНА или АКТУАЛИЗИРА запис чрез изглед?

  3. Oracle SQL:Актуализирайте таблица с данни от друга таблица

  4. как да изберете списък с 10 000 уникални идентификатори от двойни в oracle SQL

  5. Какъв е минималният клиентски отпечатък, необходим за свързване на C# към база данни на Oracle?