Oracle SQL:子查询分解与 PIVOT 相结合

Oracle SQL: Subquery Factoring combined with PIVOT

将子查询分解与 PIVOT 一起使用会导致

ORA-56901: non-constant expression is not allowed for pivot|unpivot values

问题是(因为这正是我想要做的):是否可以将先前查询的结果用作枢轴值?

我发现 this ressource,其中内联语句与 XML 一起使用,但我无法弄清楚如何让它工作(没有 XML关键字):

PIVOT (SUM(quantity) AS sum FOR (product_code) IN (SELECT DISTINCT product_code 
                                                            FROM   pivot_test
                                                            WHERE  id < 10));

到目前为止我得到了什么:

WITH KEYS AS (
  SELECT DISTINCT
    PARTKEY
  FROM MYKEYTABLE
)

SELECT
  *
FROM
(
  SELECT ID, PARTKEY 
  FROM MYVALUETABLE
)
PIVOT
(   
  COUNT(PARTKEY)
  FOR (PARTKEY) IN (KEYS)
);

期望的结果应该类似于喜欢(哪些部分用于特定 ID)

ID  |PARTKEY1|PARTKEY2|PARTKEY3
____|________|________|________
123 |1       |0       |1
456 |0       |1       |1

The documentation 说到 pivot 子查询语法:

A subquery is used only in conjunction with the XML keyword. When you specify a subquery, all values found by the subquery are used for pivoting. The output is not the same cross-tabular format returned by non-XML pivot queries. Instead of multiple columns specified in the pivot_in_clause, the subquery produces a single XML string column.

所以你不能使用带有 non-XML 主元的子查询,因为这会在结果集中创建可变数量的列,这是不允许的 - 列数必须在 parse-time。对于 XML 版本,始终只有一个 XMLType 列,因此不会排除您从子查询中获得的变量 IN 子句。