在T-SQL中选择受HAVING属性限制的原始值的方法是什么?例如,如果我有
A|B
10|1
11|2
10|3
我如何获得B的所有值(不是平均值或其他汇总统计数据),按A分组,计数(A的出现次数)大于或等于2?
发布于 2011-12-30 07:26:41
实际上,您有几个选项可供选择
1.您可以从原始的having语句生成子查询,并将其连接回表
SELECT *
FROM YourTable yt
INNER JOIN (
SELECT A
FROM YourTable
GROUP BY
A
HAVING COUNT(*) >= 2
) cnt ON cnt.A = yt.A
另一个等效的解决方案是使用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)
发布于 2011-12-30 07:27:44
自连接将起作用:
select B
from table
join(
select A
from table
group by 1
having count(1)>1
)s
using(A);
发布于 2011-12-30 08:00:27
您可以使用窗口函数(无连接,只有一次表扫描):
select * from (
select *, cnt=count(*) over(partiton by A) from table
) as a
where cnt >= 2
https://stackoverflow.com/questions/8674668
复制相似问题