将每个第二组分成1或2组SQL

时间:2017-05-04 09:12:00

标签: 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         3         1

属于模型的每个第二个组件都应该有一个替代组号。

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

1 个答案:

答案 0 :(得分:1)

我认为您的ModelComponent 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 |
+-------+-----------+-------+