【问题标题】: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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-13
            • 2023-03-15
            • 2021-12-16
            • 2018-05-01
            • 2017-04-11
            相关资源
            最近更新 更多