可以将 PIVOT 操作拆分成多个步骤,使用 WITH 子句创建临时表,分步进行数据转换和聚合,最后将结果合并。以下是示例代码:
WITH pivot1 AS ( SELECT col1, MAX(CASE WHEN col2 = 'a' THEN col3 ELSE NULL END) AS a, MAX(CASE WHEN col2 = 'b' THEN col3 ELSE NULL END) AS b FROM table1 GROUP BY col1 ), pivot2 AS ( SELECT col1, MAX(CASE WHEN col2 = 'c' THEN col4 ELSE NULL END) AS c, MAX(CASE WHEN col2 = 'd' THEN col4 ELSE NULL END) AS d FROM table1 GROUP BY col1 ) SELECT pivot1.col1, pivot1.a, pivot1.b, pivot2.c, pivot2.d FROM pivot1 JOIN pivot2 ON pivot1.col1 = pivot2.col1;