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

时间:2015-11-25 14:43:48

标签: sql sql-server tsql sql-server-2014

示例表:

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子句?

4 个答案:

答案 0 :(得分:12)

使用条件聚合

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

您可以使用带有Col1表达式的'Banana'来有条件地检查至少一个 COUNT值的CASE个群组。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这是一个简单的方法:

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

答案 3 :(得分:0)

试试这个,

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