Tsql 为每个类别中的每n个记录分配新组
我需要为每个类别中的每n个记录创建组。例如,我有一个包含StdId、Gender和Subject的学生表,现在我想将所有学生按性别和科目分组,每组不能超过两个 下面是示例数据的代码Tsql 为每个类别中的每n个记录分配新组,tsql,Tsql,我需要为每个类别中的每n个记录创建组。例如,我有一个包含StdId、Gender和Subject的学生表,现在我想将所有学生按性别和科目分组,每组不能超过两个 下面是示例数据的代码 declare @Students table (StdId int, Gender char(1), Subj varchar(10)) insert into @students select 1, 'F', 'Math' insert into @students select 2, 'M', 'Math'
declare @Students table (StdId int, Gender char(1), Subj varchar(10))
insert into @students select 1, 'F', 'Math'
insert into @students select 2, 'M', 'Math'
insert into @students select 3, 'M', 'Math'
insert into @students select 4, 'F', 'Math'
insert into @students select 5, 'F', 'Math'
insert into @students select 6, 'F', 'History'
insert into @students select 7, 'M', 'History'
insert into @students select 8, 'F', 'English'
insert into @students select 9, 'F', 'English'
insert into @students select 10, 'M', 'English'
insert into @students select 11, 'F', 'English'
insert into @students select 12, 'M', 'English'
我需要这样的输出:
GroupNo Subj Gender StdId
1 English F 8
1 English F 9
2 English F 11
3 English M 10
3 English M 12
4 History F 6
5 History M 7
6 Math F 1
6 Math F 4
7 Math F 5
8 Math M 2
8 Math M 3
Ok在的帮助下找到了我的解决方案
伟大的工作张贴在一个容易复制的格式样本日期!不过,一般来说,最好也向我们展示您尝试过的内容和不适用的内容。否则,我们只是为您做这些工作,您没有机会学习代码。看看我的投票,虽然,包括数据设置和期望的输出。好吧,因为你找到了一个解决方案,我已经删除了我的答案。
;with FirstRank as
(select DENSE_RANK() over (order by Subj, Gender) as rnk, * from @students),
SecondRank AS
(select (ROW_NUMBER() OVER (PARTITION BY rnk ORDER by gender)-1)
/ 2 as rn,*
from FirstRank
)
select DENSE_RANK() OVER (ORDER BY rnk,rn) as GrpNo, Subj, Gender, StdId from SecondRank