2014-09-25 3 views
0

Я хотел бы найти строки в таблице, которые имеют одинаковые значения для столбцов A, B, и C, но разные значения для столбца D.Запрос Oracle для поиска строк в таблице, которые имеют одинаковые значения для столбцов A, B и C, но разные значения для столбца D

Я имел в виду, что значения в столбце a одинаковы для столбца A, значения для столбца B одинаковы. и т.д.

Если у вас есть таблица сотрудника, мне нужно те строки, которые имеют сотрудник с тем же отделом, руководителем же, в разных местах

+3

... 'WHERE a = b И b = c И a <> d' –

+0

Я имел в виду, что значения в столбце a одинаковы для столбца a, значения для столбца b одинаковы. и т. д. Если у вас есть таблица сотрудников, мне нужны строки, в которых есть сотрудники с тем же отделом, одним и тем же супервизором, в разных местах. – OPost

+0

@OPost Вы должны отредактировать свой вопрос при предоставлении дополнительной информации. Я сделал это для вас. Просмотрите это изменение. –

ответ

0

Если бы я получил это право:

select * 
    from YOUR_TABLE t 
where (t.a is not null and t.a = t.b and t.b = t.c and t.a != t.d) 
    or (t.a is null and t.b is null and t.is null and t.d is not null) 
0

Если эти столбцы NULLable/Необязательно, тогда вы можете использовать NVL или любую другую функцию обработки NULL. Поскольку одно значение NULL не равно другому.

0

Если вы просто хотите, чтобы найти, какой отдел/комбинация супервизора есть несколько мест, то вы можете использовать group by и having:

select department, supervisor, count(distinct location) as locations 
from employee e 
group by department, supervisor 
having count(distinct location) > 1; 

Если вы хотите, чтобы все данные из строк, которые в любом из этих ведомств, то вы может использовать это как подзапрос, но это означает, что нужно дважды нажать стол. Вы можете использовать аналитический счетчик вместо:

select id, department, supervisor, location 
from (
    select e.*, 
    count(distinct location) 
     over (partition by department, supervisor) locations 
    from employee e 
) 
where locations > 1 
order by id; 

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

Внутренний запрос получает исходные данные из таблицы и добавляет столбец, который имеет количество (разных) местоположений для отдела/супервизора в этой строке, по всему набору результатов - это аналитическая часть. Внешний запрос затем отфильтровывает те, у которых есть только одно местоположение.

Quick SQL Fiddle demo с готовыми данными.

Это было бы более значимым для вас, если бы вы включили фактический стол и данные образца в вопрос.

+0

Запрос с подзапросом работал для меня. Благодарю. – OPost