【发布时间】:2022-08-04 16:01:24
【问题描述】:
灵感来自Adrian\'s answer 我想知道是否可以使用PIVOT 来产生组合和独特的值列表。
旁注:ARRAY_AGG 未列在 PIVOT 的文档中。
样本数据:
CREATE OR REPLACE TABLE test_data(studentid INT, grade TEXT, month TEXT /*columns*/)
AS SELECT * FROM VALUES
(1, \'A\', \'JAN\'),
(1, \'A\', \'JAN\'),
(2, \'C\', \'JAN\'),
(2, \'D\', \'JAN\'),
(2, \'D\', \'JAN\'),
(1, \'B\', \'FEB\'),
(1, \'B\', \'FEB\'),
(2, \'F\', \'FEB\'),
(2, \'E\', \'FEB\'),
(1, \'B\', \'MAR\'),
(1, \'B\', \'MAR\'),
(2, \'A\', \'MAR\'),
(2, \'B\', \'MAR\');
使用枢轴:
SELECT *
FROM test_data
PIVOT (ARRAY_AGG(grade) FOR month IN (\'JAN\', \'FEB\', \'MAR\')) AS p;
输出:
| STUDENTID | \'JAN\' | \'FEB\' | \'MAR\' |
|---|---|---|---|
| 1 | [ \"A\", \"A\" ] | [ \"B\", \"B\" ] | [ \"B\", \"B\" ] |
| 2 | [ \"C\", \"D\", \"D\" ] | [ \"F\", \"E\" ] | [ \"A\", \"B\" ] |
所需的输出不应包含数组内的重复项。使用 DISTINCT 关键字会产生以下错误:
SELECT *
FROM test_data
PIVOT (ARRAY_AGG(DISTINCT grade) FOR month IN (\'JAN\', \'FEB\', \'MAR\')) AS p;
语法错误:意外 \'DISTINCT\'
标签: pivot snowflake-cloud-data-platform