如何通过HAVING条件过滤原始行?

时间:2011-12-29 23:23:44

标签: sql sql-server tsql

T-SQL中用于选择受HAVING属性限制的原始值的方法是什么。例如,如果我有

A|B
10|1
11|2
10|3

我如何获得B的所有值(非平均值或其他一些摘要统计数据),由A分组,计数(发生次数为A)大于或等于2?

3 个答案:

答案 0 :(得分:3)

实际上,您有多种选择可供选择

<强> 1。您可以使用原始语句创建子查询,然后将其加入表格

SELECT *
FROM   YourTable yt
       INNER JOIN (
         SELECT A
         FROM   YourTable
         GROUP BY
                A
         HAVING COUNT(*) >= 2
       ) cnt ON cnt.A = yt.A

<强> 2。另一个等效的解决方案是使用WITH子句

  ;WITH cnt AS (
    SELECT A
    FROM   YourTable
    GROUP BY
           A
    HAVING COUNT(*) >= 2
  )
      SELECT *
      FROM   YourTable yt
             INNER JOIN cnt ON cnt.A = yt.A

第3。或者您可以使用IN语句

      SELECT *
      FROM   YourTable yt
      WHERE  A IN (SELECT A FROM YourTable GROUP BY A HAVING COUNT(*) >= 2)

答案 1 :(得分:2)

自我加入将起作用:

select B
from table
join(
  select A
  from table
  group by 1
  having count(1)>1
)s
using(A);

答案 2 :(得分:1)

您可以使用窗口功能(无连接,只有一个表扫描):

select * from (
  select *, cnt=count(*) over(partiton by A) from table
) as a 
where cnt >= 2