2017-05-04 17 views
0

すべてのモデルには複数のコンポーネントのリストがあります。私はそれが属するモデルに基づいてすべての第2のコンポーネントをグループ化したいと思います。2番目のグループを1つまたは2つのグループに分けるSQL

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 

モデルに属する2番目のコンポーネントはすべて、代替グループ番号を持つ必要があります。

私は窓関数を使用しなければならないと考えていますが、解決できませんでした。

+0

ご期待出力されているものを –

答えて

1

あなたのModelComponentのID番号は完全に増分しないと仮定していますが、それらは一意になります。そのように、あなたは2でrow_number結果の除算の余りを取得するためにmoduloオペレータ%とともにrow_numberウィンドウ機能を使用することができます。

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 | 
+-------+-----------+-------+ 
関連する問題