【问题标题】:Oracle PIVOT issue (NULL pivot columns in result)Oracle PIVOT 问题(结果中的 NULL 数据透视列)
【发布时间】: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


【解决方案1】:
<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
)>

试试这个,不使用别名......它应该可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2021-02-28
    • 2019-02-07
    • 2014-07-05
    相关资源
    最近更新 更多