2013-06-05 1 views
0

У меня есть база данных с кучей различно таблиц, которые соединяются вместе, чтобы создать следующую таблицу:Как найти строки, которые имеют два столбца одинаковые, но один столбец отличается?

Col1 Col2 Col3   Col4 
51  1  1101 2009-01-24 00:00:00.000 
52  1  1101 2009-05-14 00:00:00.000 
76  1  1101 2009-02-04 00:00:00.000 
78  2  1101 2009-09-29 00:00:00.000 
79  1  1101 2009-09-25 00:00:00.000 
79  2  1101 2009-09-25 00:00:00.000 
80  1  1101 2009-02-09 00:00:00.000 
80  1  1101 2012-09-26 00:00:00.000 
80  2  1101 2009-02-09 00:00:00.000 
80  2  1101 2012-09-26 00:00:00.000 

Я в принципе хочу, чтобы получить только те строки, которые, как 79 или 80, где есть по крайней мере два ряда одинаковые в Col1 и Col3, но Col2 отличается.

Я новичок в SQL, поэтому я не знаю, просто ли это или нет, я надеюсь, что кто-то может помочь.

Благодаря

Я в надежде отображать только те строки, которые имеют одинаковые значения в столбце 1 и 3, но различаются в колонке 2, поэтому для экземпляра выше отображать только строки 79 и 80.

+2

Пожалуйста, отформатируйте таблицу в удобном для восприятия человеком виде. –

+0

Не могли бы вы показать желаемый результат? Я не могу прочитать из вашего описания то, что вы ожидаете в результате, все строки или по одному для каждой группы или ...? –

+0

Да, извините, я не понимал, как ужасно это выглядело изначально. Исправлено: – Sam

ответ

1

Используя комбинацию group by, having и count distinct должны вернуть то, что вы хотите

select col1, col3, count (distinct col2) 
from yourtable 
group by col1, col3 
having count(distinct col2) >= 2 

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

select t.* from yourtable t 
    inner join 
(
    select col1, col3 
    from yourtable 
    group by col1, col3 
    having count(distinct col2) >= 2 
) v 
    on t.col1 = v.col1 
    and t.col3 = v.col3 
1

Простенько возможно, поскольку вам, похоже, нужны только отдельные значения Col1, соответствующие отображаемым критериям;

SELECT DISTINCT Col1 
FROM Table1 
GROUP BY Col1,Col3 
HAVING COUNT(DISTINCT Col2) > 1 

An SQLfiddle to test with.