使用子查询因子和PIVOT
会导致
ORA-56901: non-constant expression is not allowed for pivot|unpivot values
问题是(因为这正是我想要做的):是否可以使用先前查询的结果作为透视值?
我找到this ressource,其中内联语句与XML一起使用,但我无法弄清楚如何使其工作(没有XML
关键字):< / p>
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
答案 0 :(得分:1)
The documentation说明了数据透视子查询语法:
子查询仅与XML关键字一起使用。指定子查询时,子查询找到的所有值都用于旋转。输出与非XML数据透视查询返回的交叉表格格式不同。子查询不是在pivot_in_clause中指定多个列,而是生成单个XML字符串列。
因此,您不能将子查询与非XML数据透镜一起使用,因为这会在结果集中创建可变数量的列,而这是不允许的 - 必须在分析时知道列数。对于XML版本,始终只有一个XMLType列,因此不会排除您从子查询中获取的变量IN子句。