我有一个表格,其中一列是check
,此列只有YES,NO和NA作为数据
执行查询时,如果Check
列至少有一个Yes
值,则应提取YES
值,否则应提取NO
值如果找不到此列的数据,则获取的值应为NA
有人可以帮助我吗?
答案 0 :(得分:0)
我不确定我是否回答了正确的问题 - 但我希望这个查询示例会有所帮助:
Select nvl(MAX(col),'NA')
from (select id, col from table
where id = 1
union all
select 1 id, null from dual)
group by id
(可以使用YES和NO,因为'YES'>'NO'所以优先级将被赋予'YES',然后是'NO' - 如果没有结果 - nvl将确保你得到NA。 对于没有结果的情况 - “select id,null from dual将确保你得到结果。”
还有很多其他方法可以编写此查询(包括分析函数,并创建聚合函数,这是您真正想要的......) - 但这是最简单的...(确保所有col值约束只是'是'和'否' - 否则正确性将受到损害。)
现在我不确定它是否回答了您的问题,但如果我理解您的需要,此处显示的想法应该适用于您的要求。
假设您正在查询的行上有索引,这也应该非常有效。
答案 1 :(得分:0)
示例解决方案:
WITH tbl_values as (
SELECT distinct mt.check_value
FROM my_table mt
ORDER BY decode(mt.check_value,'YES',1,'NO',2,3) ASC)
SELECT tv.check
FROM tbl_values tv
WHERE rownum = 1;
评论:
DECODE
声明是OP中规定的规则的关键执行。