none
T-SQLでグループ単位に連番振りなおすクエリについて RRS feed

  • 質問

  • あるテーブルの列にグループ単位でMAX上限で連番を振りなおすクエリをお伺いしたいです。

    条件としては、3までになると、1から振りなおします。

    カーソルは使わないことも前提条件です。

    ----------------------------------

    Ex)

    行No,グループ単位,[振りなおしたい連番]

    1,A,1

    2,A,1

    3,A,1

    4,B,2

    5,B,2

    6,C,3

    7,C,3       ←ここで、Max3までに行って、すぎのグループはDですから、1から振りなおす

    8,D,1

    9,D,1

    10,E,2

    11,F,3

    12,F,3       ←ここで、Max3までに行って、すぎのグループはDですから、1から振りなおす

    13,G,1

    ・・・

    ----------------------------------

    上記の条件で、クエリで実現できますか。

    dense_rank()を見ましたが、3までの条件付きの作り方はわかりませんでした。

    どなかかアドバイスをいただけないでしょうか。


    2013年9月6日 16:47

回答

  • こんな?

    CREATE TABLE [Test]( [ID] INT IDENTITY(1,1) , [GR] char(1));
    INSERT INTO [Test]([GR]) VALUES('A'),('A'),('A'),('B'),('B'),('C'),('C'),('D'),('D'),('E'),('F'),('F'),('G');
    GO
    --3で割った余りは0~2の範囲になるのを利用してみる
    SELECT [ID] , [GR] , (((DENSE_Rank() OVER(order by [GR]))-1) % 3 + 1) from Test;
    GO


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク Yang Jiayi 2013年9月7日 1:52
    2013年9月6日 23:28

すべての返信

  • こんな?

    CREATE TABLE [Test]( [ID] INT IDENTITY(1,1) , [GR] char(1));
    INSERT INTO [Test]([GR]) VALUES('A'),('A'),('A'),('B'),('B'),('C'),('C'),('D'),('D'),('E'),('F'),('F'),('G');
    GO
    --3で割った余りは0~2の範囲になるのを利用してみる
    SELECT [ID] , [GR] , (((DENSE_Rank() OVER(order by [GR]))-1) % 3 + 1) from Test;
    GO


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク Yang Jiayi 2013年9月7日 1:52
    2013年9月6日 23:28
  • こんな?

    CREATE TABLE [Test]( [ID] INT IDENTITY(1,1) , [GR] char(1));
    INSERT INTO [Test]([GR]) VALUES('A'),('A'),('A'),('B'),('B'),('C'),('C'),('D'),('D'),('E'),('F'),('F'),('G');
    GO
    --3で割った余りは0~2の範囲になるのを利用してみる
    SELECT [ID] , [GR] , (((DENSE_Rank() OVER(order by [GR]))-1) % 3 + 1) from Test;
    GO


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    なるほどね、-1して、割って、後で+1ですね。

    いいわざですね。有難う御座いました。

    2013年9月7日 1:53