我试图为存储在一个表中的每个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主题,我想我必须使用子查询,但我找不到正确的解决方案。
先谢谢。
问候。
答案 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