Найти только те идентификаторы, где цвет одинаков во всех строках - PullRequest
0 голосов
/ 04 сентября 2018
id  color
1   Yellow
1   Pink
2   Yellow
2   blue
3   Yellow
3   Yellow
4   Red

Требуются только те идентификаторы, где цвет одинаков для всех строк.

Пробовали несколько способов, но не получили никакого ответа.

;WITH CTE AS (
select ROW_NUMBER() OVER(PARTITION BY A.ID,A.COLOR ORDER BY A.ID,A.COLOR)RNO,A.ID,A.COLOR from COLOR a join COLOR b on a.id = b.id and a.color=b.color
)
SELECT DISTINCT ID, COLOR FROM CTE --WHERE RNO > 1

SELECT *
FROM color a join (
    SELECT id, color, count(*) as qty
    FROM color
    GROUP BY id, color
    HAVING COUNT(*) > 1
) b on a.id = b.id and a.color = b.color


select * from (
Select color,id,count(1)cnt from COLOR
group by color,id
having count(1) = 1

union all

Select color,id,count(1)cnt from COLOR
group by color,id
having count(1) > 1

) as t  where cnt  between 1 and 4

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вы можете использовать not exists:

select c.*
from color c
where not exists (select 1 from color c1 where c1.id = c.id and c1.color <> c.color);
0 голосов
/ 04 сентября 2018

GROUP BY с HAVING выполнят эту работу. COUNT(DISTINCT color) вернет разные цвета в каждой группе. Если он вернет 1, то у нас будет один цвет для всех строк в группе.

select id from my_table
group by id
having count(distinct color) = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...