Получить несколько записей только с помощью SELECT DISTINCT или аналогичных

У меня есть такие записи:

Column1 Column2
A       Blue
A       Blue
B       Red
B       Green
C       Blue
C       Red

С помощью SELECT DISTINCT Я получаю это:

Column1 Column2
A       Blue
B       Red
B       Green
C       Blue
C       Red

Что бы я хотел получить:

Column1 Column2
B       Red
B       Green
C       Blue
C       Red

Поэтому мне нужно получить только несколько записей столбца column1, которые имеют разные значения в column2. (Я соединяю два стола)

С SELECT DISTINCT я стал ближе к тому, что мне нужно, но я не могу найти способ исключить записи типа "A" в column1, которые всегда имеют одинаковое значение в column2...

5 ответов

Решение

Попробуй это:

SELECT * FROM yourtable
WHERE Column1 IN
(SELECT Column1
 FROM yourtable
 GROUP BY Column1
 HAVING COUNT(DISTINCT Column2) > 1
)

DISTINCT в COUNT гарантирует, что вы получите только те записи, где Column2 имеет несколько различных значений.

Попробуйте следующий запрос:

SELECT Col1,Col2
FROM tbl
GROUP BY Col1,Col2
HAVING COUNT(Col1)<=1

Вы можете использовать как это

select a.Column1 ,count(a.Column1 )
from 
   (select Distinct Column1 ,Column2 
    from Items) a
group by a.Column1 
having Count(a.Column1 ) > 1

Предполагая, что вы используете MS SQL Server.... это не так DISTINCT работает, DISTINCT применяется ко всему списку столбцов в SELECT Скажите, вот почему вы получаете результат, который вы упомянули. Попробуйте использовать комбинацию GROUP BY а также HAVING как ниже...

SELECT Column1, Column2 FROM [table_name] 
GROUP BY Column1, Column2 
HAVING COUNT(*) < 2 
ORDER BY Column1

Я думаю, что этот код будет работать в большинстве систем:

SELECT Col1,Col2
FROM tbl
GROUP BY Col1,Col2
HAVING COUNT(*)<=1

Смотрите результаты: http://sqlfiddle.com/

Другие вопросы по тегам