T-SQL中用于选择受HAVING属性限制的原始值的方法是什么。例如,如果我有
A|B
10|1
11|2
10|3
我如何获得B的所有值(非平均值或其他一些摘要统计数据),由A分组,计数(发生次数为A)大于或等于2?
答案 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