2015-06-09 1 views
0

У меня есть таблица, которая имеет следующие данные:Oracle/SQL нужно найти записи с точно таким же значением, соответствующими определенным значением в другой колонке

NAME VALUE 

ABC  Y 
ABC  Y 
ABC  Y 
ABC  Y 
ABC  Y 
DEF  W 
DEF  Y 
DEF  Y 
DEF  Y 
DEF  Y 
GHI  Y 
GHI  Y 
GHI  Y 
GHI  Y 
GHI  Y 

Теперь я хочу написать запрос, который будет возвратите те имена, где все значения в строках, которые имеют это конкретное имя, являются одинаковыми.

Желаемое выход:

ABC 
GHI 

Поскольку все значения для ABC и GHI равны Y.

+0

уточнил формулировку немного – Vesper

ответ

0
select NAME 
    from YOUR_TABLE 
    group by NAME 
    having count(distinct VALUE) = 1 
    and min(VALUE) = 'Y' 
+0

Это w ill также возвращает имя с только значением «N». – jarlh

+0

Это лучше !!! – jarlh

+0

@jarlh: да, спасибо. Исправлена –

0

Использование DISTINCT для удаления дубликатов, используйте NOT EXISTS, чтобы избежать имен с другим значением, чем Y.

select distinct name 
from tablename t1 
where not exists (select 1 from tablename t2 
        where t1.name = t2.name 
        and t2.value <> 'Y') 
Смежные вопросы