Sql 选择不同行中的列必须正好具有值的行

Sql 选择不同行中的列必须正好具有值的行,sql,sql-server,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 请尝试以下查询: declare @tbl tab

我想选择
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
具有BAB认证。预期结果:

userid
 2
请尝试以下查询:

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
认证。

分组。使用
HAVING
with
COUNT DISTINCT
确保BA和B都在那里

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

它可能不止一个,例如BA+B,BA+C。问题是,可能不仅仅是BA+B,还有很多组合,如BA+B+C和BA+BOnly-BA和B将通过WHERE子句,该子句在GROUP BY和HAVE之前执行。抱歉,如果我不能正确编写它。过滤器取决于应用程序的参数。它可以过滤所有拥有BA或BA+B或B证书的用户。查询正在动态生成