我有一个像下面这样的表,希望选择不同的人,例如第2行,第9行,第11行,第20行。我不想选择MAX(),因为它不是随机的。而且我不想两次选择杰克。它需要是每组记录中的一个人
ID Name Category Level
1 Jack Dragon 3
2 Jack Falls 5
3 Jack Spider 5
4 Jack Apprentice 1
5 Jack Jolly 5
6 Luke Dragon 1
7 Luke Falls 1
8 Luke Spider 3
9 Luke Apprentice 5
10 Luke Jolly 5
11 Mark Dragon 3
12 Mark Falls 3
13 Mark Spider 1
14 Mark Apprentice 3
15 Mark Jolly 1
16 Sam Dragon 3
17 Sam Falls 5
18 Sam Spider 5
19 Sam Apprentice 5
20 Sam Jolly 3
答案 0 :(得分:1)
假设记录集=具有相同“名称”值的行:
with cte_random
as
(
select *, rank() over (partition by forenames order by newid()) as rnk from tbl
)
select id, name, category, level from cte_random where rnk = 1
答案 1 :(得分:0)
SELECT DISTINCT name
from tbl
ORDER BY NEWID()
答案 2 :(得分:0)
这看起来比听起来更棘手,创建一个带有额外temp
列的tempId
表应该可行。尝试:
create table #temp(ID int, Name char(10), Category char(10), Level int, tempId varchar(36))
insert #temp select ID, Name, Category, Level, NEWID() as 'tempId' from yourTable
select ID, Name, Category, Level from #temp where ID IN
(select min(tempId) from #temp group by Name)
drop table #temp