12

假设我有一张桌子

  id            value
------        ---------
  A              123
  A              422
  B              441
  B              986
  B              674
  C              648

我需要一个查询,它只返回那些与它们关联的 3 个或更多值的 id。所以,在这种情况下,它只会返回 B。谢谢。

4

4 回答 4

27

使用该Group By子句Having

SELECT id 
FROM dbo.TableName
GROUP BY ID
HAVING COUNT(*) >= 3

Demo

于 2013-11-12T21:06:28.737 回答
3

如果您想包含该值,您可以使用窗口函数来查找具有三行或更多行的值,例如:

DECLARE @x TABLE(id CHAR(1), value INT);

INSERT @x SELECT 'A',       123;
INSERT @x SELECT 'A',       422;
INSERT @x SELECT 'B',       441;
INSERT @x SELECT 'B',       986;
INSERT @x SELECT 'B',       674;
INSERT @x SELECT 'C',       648;

;WITH x AS 
(
  SELECT id, value, rn = ROW_NUMBER() OVER (PARTITION BY id ORDER BY id)
  FROM @x
)
SELECT id FROM x WHERE rn = 3;

您可以更改ORDER BY以帮助更好地确定value包含哪些内容。

于 2013-11-12T21:11:43.997 回答
2

select id from table group by id having (count(id) >=3)

于 2013-11-12T21:07:38.610 回答
1
SELECT ID
FROM TABLE
GROUP BY ID
HAVING COUNT(*) >= 3
于 2013-11-12T21:06:59.340 回答