HAVING子句:至少有一个未组合的值是X.

D.R*_*.R. 6 sql t-sql sql-server sql-server-2014

示例表:

Col1 | Col2
A    | Apple
A    | Banana
B    | Apple
C    | Banana
Run Code Online (Sandbox Code Playgroud)

输出:

A
Run Code Online (Sandbox Code Playgroud)

我希望得到的所有值Col1都有多个条目,至少有一个条目Banana.

我试着用GROUP BY:

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

如何改写HAVING我的查询有效的子句?

Gio*_*sos 14

使用条件聚合:

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

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

请注意,COUNT必须使用第一个DISTINCT,以便检测具有至少两个不同 Col1值的组.如果通过多个条目表示具有相同Col2值的行重复多次,则可以跳过DISTINCT.