22,210
社区成员
发帖
与我相关
我的任务
分享
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([学生id] int,[班级id] int)
Insert #T
select 1,101 union all
select 2,101 union all
select 3,101 union all
select 4,101 union all
select 5,102 union all
select 6,102 union all
select 7,201
Go
--测试数据结束
select [学生id],[班级id] from (
Select *,row_number() over(partition by 班级id order by newid()) rn from #T
)t where rn=1
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[学生id] int
,[班级id] VARCHAR(10)
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'1',N'101')
INSERT INTO dbo.[t] VALUES(N'2',N'101')
INSERT INTO dbo.[t] VALUES(N'3',N'101')
INSERT INTO dbo.[t] VALUES(N'4',N'101')
INSERT INTO dbo.[t] VALUES(N'5',N'102')
INSERT INTO dbo.[t] VALUES(N'6',N'102')
INSERT INTO dbo.[t] VALUES(N'7',N'201')
SELECT * FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY [班级id] ORDER BY NEWID()) AS rid,* FROM t
) AS tt
WHERE tt.rid=1
create table #t(学生id int,班级id int)
insert into #t(学生id,班级id)
select 1,101 union all
select 2,101 union all
select 3,101 union all
select 4,101 union all
select 5,102 union all
select 6,102 union all
select 7,201
select 学生id,班级id
from (select *,rn=row_number() over(partition by 班级id order by newid())
from #t) t
where t.rn=1
/*
学生id 班级id
----------- -----------
3 101
5 102
7 201
(3 row(s) affected)
*/