如果ID中的任何行包含特定值,请选择SELECT

时间:2017-05-08 15:56:35

标签: sql oracle

我有一个带有ID及其分类的数据库(以及更多目前无用的列), 由于未使用列的差异,一个ID可能具有不同的分类,如:

ID        Classification

1001      A
1001      A

1002      A
1002      A
1002      B

我需要的是对ID进行分组并按规则进行分类“如果此ID中的任何行被'B'分类,则该组(具有此ID的单行)被'B'分类,否则 - 'A'分类。

标识为1001 = A,但标识为1002 = B

我知道WHERE tab.field = ANY()函数,但我有相反的情况 - 比较的左边部分应该是ANY,而右边部分应该是硬编码的。我有点假设,因为比较结果是布尔值,比左/右部分的位置无关紧要,但我无法弄清楚查询 - 子查询关系。

请帮忙

3 个答案:

答案 0 :(得分:1)

您可以使用count窗口功能执行此操作。

select distinct id
,case when count(case when classification='B' then 1 end) over(partition by id) >=1 then 'B' else 'A' end as classified
from t

答案 1 :(得分:1)

对于感兴趣的分类也是具有最后一个字母位置的字母的特殊情况,您可以简单地执行:

SELECT
  ID,
  MAX(Classification)
FROM tab
GROUP BY ID;

答案 2 :(得分:0)

您可以简单地找到每个ID的最大分类:

select id,
    max(classification)
from your_table
group by id;