Tôi bị mắc kẹt. Tôi muốn làm một bảng do người dùng nhập vai mối quan hệ trục và truy vấn của tôi cho đến nay trông như thế này:Động Oracle Pivot_In_Clause
WITH PIVOT_DATA AS (
SELECT *
FROM
(
SELECT USERNAME, GRANTED_ROLE
FROM [email protected]_LINK U LEFT OUTER JOIN [email protected]_LINK R
ON U.USERNAME = R.GRANTEE
)
)
SELECT *
FROM PIVOT_DATA
PIVOT
(
COUNT(GRANTED_ROLE)
FOR GRANTED_ROLE
IN('CONNECT') -- Just an example
)
ORDER BY USERNAME ASC;
Nó hoạt động thực sự tốt và không được công việc, nhưng tôi không muốn viết để viết bất kỳ vai trò tôi muốn tìm kiếm trong số pivot_in_clause
, bởi vì chúng tôi nhận được hàng tấn chúng và tôi không muốn kiểm tra mọi lúc nếu có bất kỳ thay đổi nào.
Vì vậy, có cách nào để viết SELECT
trong pivot_in_clause
? Tôi đã tự mình thử:
[...]
PIVOT
(
COUNT(GRANTED_ROLE)
FOR GRANTED_ROLE
IN(SELECT ROLE FROM [email protected]_LINK)
)
[...]
Nhưng nó luôn mang đến cho tôi một ORA-00936: "thiếu biểu thức" trong dòng 1 của toàn bộ truy vấn và tôi không biết tại sao. Không thể có một số SELECT
trong số pivot_in_clause
hoặc tôi đang làm sai?
Các vấn đề với mong muốn của bạn là số cột của kết quả là không thể đoán trước/biến. –
@FlorinGhita: Có, tôi phải chạy tập lệnh này trên 5 trường hợp cơ sở dữ liệu khác nhau và số vai trò khác nhau. Đó là lý do tại sao tôi muốn có một phiên bản "động" của tập lệnh này. –
Bạn có thể sử dụng PIVOT XML và sau đó sử dụng (bất kỳ) làm mệnh đề của bạn. Nhược điểm là sau đó nó là vào khách hàng của bạn để phân tích cú pháp xml. – dazedandconfused