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

Dynamisk pivot i oracle sql

Du kan ikke sætte en dynamisk sætning i PIVOT's IN-sætning uden at bruge PIVOT XML, som udsender noget mindre end ønsket output. Du kan dog oprette en IN-streng og indtaste den i din erklæring.

Først, her er min eksempeltabel;

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

Indstil først den streng, der skal bruges i din IN-sætning. Her sætter du strengen ind i "str_in_statement". Vi bruger COLUMN NEW_VALUE og LISTAGG til at opsætte strengen.

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

Din streng vil se sådan ud:

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

Brug nu String-sætningen i din PIVOT-forespørgsel.

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

Her er outputtet:

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

Der er dog begrænsninger. Du kan kun sammenkæde en streng på op til 4000 bytes.



  1. Sæt et plus/minustegn foran et tal i PostgreSQL

  2. Kan ikke oprette forbindelse til MySQL-server fejl 111

  3. Tilslutning af en 64-bit applikation til Clarion TopSpeed

  4. Sådan opretter du Stored Procedure i MySQL