选择行,其中不同行中的列必须具有完全相同的值

时间:2019-10-09 05:54:30

标签: sql sql-server

我想选择userid的认证为 BA + B (可以是 BA + B + C ,由应用程序确定) BA B 这两个值。

样本表数据:

id, userid, certification
1    1         A
2    1         BA
3    1         C
4    2         B
5    2         C
6    2         BA

userid=2拥有 BA B 认证。预期结果:

userid
 2

2 个答案:

答案 0 :(得分:4)

执行GROUP BY。将HAVINGCOUNT DISTINCT一起使用,以确保BA和B都在其中。

select userid 
from MyTable
where certification IN ('B', 'BA')
group by userid
having count(distinct certification ) = 2

答案 1 :(得分:0)

请尝试以下查询:

declare @tbl table (id int, userid int, certification varchar(5));
insert into @tbl values
(1, 1, 'A' ),
(2, 1, 'BA'),
(3, 1, 'C' ),
(4, 2, 'B' ),
(5, 2, 'C' ),
(6, 2, 'BA');   

select userid 
from @tbl
group by userid
having sum(case when certification = 'B' then 1 else 0 end) > 0
and sum(case when certification = 'BA' then 1 else 0 end) > 0

它强制每个userid至少拥有一个B和一个BA认证。