首页 > 解决方案 > 如果 column1 与所需条件不匹配,则选择 column2

问题描述

似乎我无法找到一种有效的方法来使用 oracle SQL 查询来解决这个问题。

请分享您的建议。

我有下表。

描述 代码1 代码2 代码3 代码4 代码5
苹果 一个 AA ap
苹果 C AA ap
苹果 一个 DD ap
芒果 毫克

我会使用查询

Select Desc from myTable where Code1='A'

上面的查询会给我'Apple'作为回复

Select Desc from myTable where Code2='AA'

上面的查询将再次给我“Apple”作为回复

结合两者:

Select Desc from myTable where (Code2='AA' or Code1='A')

我怎么知道由于哪个列满足了“OR”条件?

标签: sqloracle

解决方案


您可以在select

Select t.Desc,
       (case when Code2 = 'AA' then 'Code2'
             when Code1 = 'A' then 'Code1'
        end)
from myTable t
where Code2 = 'AA' or Code1 = 'A';

如果您想同时查看两者是否匹配,请调整逻辑:

Select t.Desc,
       trim(',' from
               (case when Code2 = 'AA' then ',Code2' end) '||'
               (case when Code1 = 'A' then ',Code1' end)
           ) as columns
from myTable t
where Code2 = 'AA' or Code1 = 'A';

您还可以使用横向连接、子查询或 CTEcolumns仅定义一次:

Select t.Desc, c.columns
from myTable t cross join lateral
     (select trim(',' from
                   (case when Code2 = 'AA' then ',Code2' end) '||'
                   (case when Code1 = 'A' then ',Code1' end)
                 ) as columns
      from dual
     ) c
where columns is not null;

推荐阅读