【发布时间】:2012-01-04 15:08:44
【问题描述】:
我在尝试执行 PIVOT 时遇到了 Oracle 的奇怪问题。基本上它为所有透视列返回 NULL 而它不应该
WITH
"Customer" AS (
SELECT * FROM "doCustomer" WHERE __some_conditions_here__
)
SELECT
*
FROM
"Customer"
PIVOT (
MIN("ChargeCommission") AS "ChargeCommission"
FOR ("Index") IN (
01 AS C01, 02 AS C02, 03 AS C03, 04 AS C04, 05 AS C05, 06 AS C06, 07 AS C07, 08 AS C08, 09 AS C09, 10 AS C10,
11 AS C11, 12 AS C12, 13 AS C13, 14 AS C14, 15 AS C15, 16 AS C16, 17 AS C17, 18 AS C18, 19 AS C19, 20 AS C20
)
)
“客户”总是返回非空数据,所以数据没有问题。 但是整个查询的结果取决于我在 some_conditions_here 中输入的内容。我发现了依赖性 - “客户”中的数据较少 -> 空值较少。 我知道我可以重写这个查询,让它使用解码/分组,但我只是好奇它为什么会这样。 Oracle 版本为 11g。
【问题讨论】:
-
“索引”是字符字段还是数字字段?
-
@MarkBannister - 数字;我发现了另一个有趣的事实——如果我在 FOR("Index") 中枚举少于 20 个数字(例如 10 个),结果也是正确的。
标签: sql oracle plsql oracle11g pivot