Sử dụng crosstab()
biến thể có hai tham số
:
SELECT * FROM crosstab(
'SELECT zone_id, group_id, area
FROM ct
ORDER BY 1,2'
,'SELECT g FROM generate_series(1,8) g' -- ! Provide values explicitly
)
AS ct(
row_name integer
, g_1 float8, g_2 float8
, g_3 float8, g_4 float8
, g_5 float8, g_6 float8
, g_7 float8, g_8 float8);
Từ đó khai báo rõ ràng giá trị nào đi ở cột đầu ra nào. Vì vậy, hàm biết nơi để điền vào NULL
các giá trị. Trong trường hợp này generate_series()
có ích khi cung cấp 8 hàng với các số từ 1-8. VALUES
biểu thức sẽ là một thay thế:
'VALUES (1), (2), (3), (4), (5), (6), (7), (8)'
Ngoài ra, đừng quên ORDER BY
trong truy vấn tham số đầu tiên.
Tôi đã cung cấp một giải thích chi tiết trong câu trả lời có liên quan này .