Sql server 每秒钟将一个组分隔为1或2个组

Sql server 每秒钟将一个组分隔为1或2个组,sql-server,Sql Server,我有一个多个组件的列表,所有组件都有一个型号。我想根据它所属的模型对每一个组件进行分组 Model | Component | Group 1 1 1 1 2 2 1 3 1 1 4 2 1 5 1 2 1 1 2 2 2 2

我有一个多个组件的列表,所有组件都有一个型号。我想根据它所属的模型对每一个组件进行分组

Model | Component | Group
  1         1         1
  1         2         2 
  1         3         1 
  1         4         2 
  1         5         1
  2         1         1 
  2         2         2 
  2         3         1
属于模型的第二个组件应具有备用组号


我相信我必须使用windows功能,但无法解决问题。

我假设您的
型号
组件
ID号不是完全递增的,而是唯一的。因此,您可以使用
行数
窗口函数和
模运算器
%
行数
结果的剩余部分除以2:

declare @t table (Model int, Component int);
insert into @t values (1,1),(1,2),(1,3),(1,4),(1,5),(2,1),(2,2),(2,2);

select Model
      ,Component
      ,case (row_number() over (partition by Model order by Component) % 2)
         when 1 then 1
         when 0 then 2
         end as [Group]
from @t;
输出:

+-------+-----------+-------+
| Model | Component | Group |
+-------+-----------+-------+
|     1 |         1 |     1 |
|     1 |         2 |     2 |
|     1 |         3 |     1 |
|     1 |         4 |     2 |
|     1 |         5 |     1 |
|     2 |         1 |     1 |
|     2 |         2 |     2 |
|     2 |         2 |     1 |
+-------+-----------+-------+

你的预期产出是多少