我有一个包含型号的多个组件的列表。我想根据它所属的模型对每个第二个组件进行分组。
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功能,但无法解决。
答案 0 :(得分:1)
我认为您的Model
和Component
ID号码不会完全增量,但它们将是唯一的。因此,您可以使用row_number
窗口函数以及modulo
运算符%
将row_number
结果的除法余数除以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 |
+-------+-----------+-------+