【问题标题】:Display Column Names when NULL value found找到 NULL 值时显示列名
【发布时间】:2012-12-07 06:56:22
【问题描述】:

我有下表:

Col1    Col2    Col3    Col4    Col5    Col6    Col7
=====================================================
XYZ             GH      JY              IOP 
GH      TY                                      HGF
                TR              OPY     

我想编写一个 SQL 查询,它将检查每一行中的 NULL 值,并将具有 NULL 值的列名显示到名为“缺失值”的新列中。

所以输出将如下所示:

Missing Value 
=============
Col2,Col5,Col7
Col3,Col4,Col5,Col6
Col1,Col2,Col4,Col6,Col7

【问题讨论】:

  • 你自己试过了吗?
  • 我尝试使用 CASE 语句,它工作正常,但希望我写 SELECT CASE WHEN COL1 为 NULL 并且 COL2 为 NULL...然后“Missing COl1,Col2...”
  • 您需要在数据字典和您的数据上构建嵌套查询/子查询,或者使用可能更直接的 PL/SQL。
  • 你能帮我解决嵌套查询/子查询吗?不想使用 PL/SQL
  • 你也可以在oracle中做一个用户定义的聚合函数。

标签: sql oracle


【解决方案1】:

结构应该可以工作

select decode( col1, null, 'col1 ' ) 
|| decode( col2, null, 'col2 ' )
|| decode( col3, null, 'col3 ' ) 
from mytable

【讨论】:

  • 是的,使用 CASE 语句尝试了类似的事情并得到了它的工作,但问题是我有 12 列,所以需要为 12 列编写许多这样的语句。
  • 是的 - 每列需要一个解码,但仅此而已 - 没有其他排列 - 就像您在其他 cmets 中显示的那样。
【解决方案2】:

如果您希望结果以逗号分隔,您可以在@Randy 的回答中尝试这种变体:

SELECT
    SUBSTR
    (
        DECODE(COL1, NULL, ',COL1')
        ||
        DECODE(COL2, NULL, ',COL2')
        ||
        DECODE(COL3, NULL, ',COL3')
        ||
        DECODE(COL4, NULL, ',COL4'),
        2
    )
FROM
    YOUR_TABLE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2017-05-03
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多