在同一个表中随机选择几个相同ID的行(T-SQL)

时间:2015-08-14 09:50:31

标签: sql-server tsql subquery

我试图为存储在一个表中的每个Id选择随机几行,其中这些ID在此表上有多行。用文字解释很难,所以让我给你一个例子:

表中的示例:

Id  Review
1   Text11
1   Text12
1   Text13
2   Text21
3   Text31
3   Text32
4   Text41
5   Text51
6   Text61
6   Text62
6   Text63

预期结果:

Id  Review
1   Text11
1   Text13
2   Text21
3   Text32
4   Text41
5   Text51
6   Text62

实际上,该表包含数千行。有些ID只包含一个评论,但其他可以包含数百条评论。我想选择10%的这些,并选择至少一次,所有行都有1-9条评论(我看到SELECT TOP 10 percent FROM table ORDER BY NEWID()包括该行,即使它是单独的) 我读了一些Stack主题,我想我必须使用子查询,但我找不到正确的解决方案。

先谢谢。

问候。

1 个答案:

答案 0 :(得分:1)

试试这个:

DECLARE @t table(Id int, Review char(6))
INSERT @t values
(1,'Text11'),
(1,'Text12'),
(1,'Text13'),
(2,'Text21'),
(3,'Text31'),
(3,'Text32'),
(4,'Text41'),
(5,'Text51'),
(6,'Text61'),
(6,'Text62'),
(6,'Text63')

;WITH CTE AS
(
SELECT
  id, Review,
  row_number() over (partition by id order by newid()) rn, 
  count(*) over (partition by id) cnt
   FROM @t
 )
 SELECT id, Review
 FROM CTE
 WHERE rn <= (cnt / 10) + 1

结果(随机):

id  Review
1   Text12
2   Text21
3   Text31
4   Text41
5   Text51
6   Text63