sql - 只查找所有行颜色都相同的 ID

标签 sql sql-server t-sql

id  color
1   Yellow
1   Pink
2   Yellow
2   blue
3   Yellow
3   Yellow
4   Red

只需要那些所有行颜色都相同的 ID。

尝试了多种方法,但没有得到任何答案。

;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

最佳答案

GROUP BYHAVING 即可完成这项工作。 COUNT(DISTINCT color) 将返回每个组中不同的颜色,如果返回 1,则组中的所有行都有一种颜色。

select id from my_table
group by id
having count(distinct color) = 1

关于sql - 只查找所有行颜色都相同的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165391/

相关文章:

sql-server - 与超过 1 个表的 Sum Clause 左连接给出不正确的 Sum

sql-server - 您如何解决 NHibernate 访问的 SQL Server 数据库实例中的死锁?

SQL 删除所有限制 Azure 友好

PHP - MySQL 请求 - 未找到数据

SQL - 如何统计某一年的数据数量?

sql - 如何在 sql server 2016 中更改 JSON 列名

sql - T-SQL-连接变量行数

sql - 计算 T-SQL 表中成对出现的次数

mysql - 从mysql中获取数据并进行比较

sql - SQL中如何删除非空约束?