【问题标题】:HAVING clause: at least one of the ungrouped values is XHAVING 子句:至少有一个未分组的值是 X
【发布时间】:2016-02-28 09:56:39
【问题描述】:
示例表:
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 子句?
【问题讨论】:
标签:
sql
sql-server
tsql
sql-server-2014
【解决方案1】:
使用条件聚合:
SELECT Col1
FROM Table
GROUP BY Col1
HAVING COUNT(DISTINCT col2) > 1 AND
COUNT(CASE WHEN col2 = 'Banana' THEN 1 END) >= 1
您可以使用COUNT 和其中的CASE 表达式,有条件地检查具有至少一个 'Banana' 值的Col1 组。
请注意,第一个COUNT 必须使用DISTINCT,以便检测到至少具有两个不同 Col1 值的组。如果有多个条目您的意思是具有相同Col2 值的行也重复了多次,那么您可以跳过DISTINCT。
【解决方案2】:
SELECT Col1
FROM Table
GROUP BY Col1
HAVING count(*) > 1
AND Col1 in (select distinct Col1 from Table where Col2 = 'Banana');
【解决方案3】:
这是一个简单的方法:
SELECT Col1
FROM table
GROUP BY Col1
HAVING COUNT(DISTINCT CASE WHEN col2= 'Banana' THEN 1 ELSE 2 END) = 2
【解决方案4】:
试试这个,
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