如何使用case编写一个select查询以在oracle中生成此输出

时间:2014-10-24 05:01:06

标签: sql oracle

我正在尝试生成如下所示的报告。我们正在根据某些条件比较COLUMN_A和COLUMN_B。

COLUMN_A      COLUMN_B    STATUS
100                        OK
250           350          NOT OK
300           NULL         NULL COLUMN_A
NULL          400          NULL COLUMN_B
  • 如果column_a和column_b中的值彼此相等,我想只显示column_a值 在column_b和另一个名为status的虚拟列中没有任何内容显示结果为OK(在第一行中显示)
  • 如果column_a和column_b中的值彼此不相等,我想显示column_a和column_b值以及另一个名为status的虚拟列,显示结果为NOT OK(在第二行中显示)
  • 如果column_b值为null,我想在COLUMN_B中显示COLUMN_A值和NULL,并将状态显示为NULL COLUMN_A(在第三行中显示)

这让我很困惑。这甚至可能得到吗?

1 个答案:

答案 0 :(得分:3)

这是你想要的吗?

select column_a,
       (case when column_a = column_b or column_b is null then null else column_b end) as column_b,
       (case when column_a = column_b then 'OK'
             when column_b is null then 'NULL ' || column_a
             when column_a is null then 'NULL' || column_b
             else 'NOT OK'
        end) as status
from . . .