示例表:
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
子句?
答案 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