Bạn không thể đặt một câu lệnh động trong câu lệnh IN của PIVOT mà không sử dụng PIVOT XML, câu lệnh này xuất ra một số đầu ra ít hơn mong muốn. Tuy nhiên, bạn có thể tạo một chuỗi IN và nhập chuỗi đó vào câu lệnh của mình.
Đầu tiên, đây là bảng mẫu của tôi;
myNumber myValue myLetter
---------- ---------- --------
1 2 A
1 4 B
2 6 C
2 8 A
2 10 B
3 12 C
3 14 A
Đầu tiên hãy thiết lập chuỗi để sử dụng trong câu lệnh IN của bạn. Ở đây bạn đang đặt chuỗi vào "str_in_statement". Chúng tôi đang sử dụng COLUMN NEW_VALUE và LISTAGG để thiết lập chuỗi.
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);
Chuỗi của bạn sẽ giống như sau:
'A' AS A,'B' AS B,'C' AS C
Bây giờ, hãy sử dụng câu lệnh Chuỗi trong truy vấn PIVOT của bạn.
SELECT * FROM
(SELECT myNumber, myLetter, myValue FROM myTable)
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));
Đây là Kết quả:
MYNUMBER A_VAL B_VAL C_VAL
---------- ---------- ---------- ----------
1 2 4
2 8 10 6
3 14 12
Tuy nhiên, vẫn có những hạn chế. Bạn chỉ có thể nối một chuỗi có tối đa 4000 byte.