HAVING 子句:至少一个未分组的值是 X

HAVING clause: at least one of the ungrouped values is X

示例table:

Col1 | Col2
A    | Apple
A    | Banana
B    | Apple
C    | Banana

输出:

A

我想获取 Col1 的所有值,这些值有多个条目且至少有一个带有 Banana

我尝试使用 GROUP BY:

SELECT Col1
FROM Table
GROUP BY Col1
HAVING count(*) > 1
AND ??? some kind of ONEOF(Col2) = 'Banana'

如何重新表述我的查询有效的 HAVING 子句?

使用条件聚合:

SELECT Col1
FROM Table
GROUP BY Col1
HAVING COUNT(DISTINCT col2) > 1 AND 
       COUNT(CASE WHEN col2 = 'Banana' THEN 1 END) >= 1

您可以有条件地检查具有 至少一个 'Banana' 值的 Col1 组使用 COUNTCASE 表达式它。

请注意,第一个 COUNT 必须使用 DISTINCT,以便检测到具有至少两个 不同 Col1 值的组.如果 有多个条目 你的意思是具有相同 Col2 值的行也重复了不止一次,那么你可以跳过 DISTINCT.

SELECT Col1
FROM Table
GROUP BY Col1
HAVING count(*) > 1
AND Col1 in (select distinct Col1 from Table where Col2 = 'Banana');

试试这个,

declare @t table(Col1 varchar(20), Col2 varchar(20))
insert into @t values('A','Apple')
,('A','Banana'),('B','Apple'),('C','Banana')

select col1 from @t A
where exists
(select col1 from @t B where a.col1=b.col1 and b.Col2='Banana')
group by col1
having count(*)>1

这是一个简单的方法:

SELECT Col1
FROM table
GROUP BY Col1
HAVING COUNT(DISTINCT CASE WHEN col2= 'Banana' THEN 1 ELSE 2 END) = 2