Oracle:如何在oracle中的表的特定列中查找指定值的出现

时间:2014-03-28 05:23:37

标签: sql oracle

我有一个表格,其中一列是check,此列只有YES,NO和NA作为数据

执行查询时,如果Check列至少有一个Yes值,则应提取YES值,否则应提取NO值如果找不到此列的数据,则获取的值应为NA

有人可以帮助我吗?

2 个答案:

答案 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中规定的规则的关键执行。