MW211 EXIT

devlog
MSSQL/連番をふる
2014年12月27日
ある列([順番])を基準として並び替えた場合に、連番を1から振り直すUPDATE文。
しかも、特定のグループごと([組No])に振るという条件も加わった場合。

以下の様な感じになる。
┌──────────────────────────────────────┐
│UPDATE [表]                                                                 │
│    SET [連番] = (                                                          │
│        SELECT [連番]                                                       │
│            FROM (                                                          │
│                SELECT [組No],                                              │
│                       [順番],                                              │
│                       ROW_NUMBER() OVER(PARTITION BY [組No]                │
│                                         ORDER BY [順番] ASC) AS [連番]     │
│                    FROM [表]                                               │
│            ) AS [入力D]                                                   │
│            WHERE [入力D].[組No] = [表].[組No]                             │
│              AND [入力D].[順番] = [表].[順番]                             │
│    );                                                                      │
└──────────────────────────────────────┘

これを一歩すすめて早めに抽出を行うと以下のような感じになる。
┌──────────────────────────────────────┐
│UPDATE [表]                                                                 │
│    SET [連番] = (                                                          │
│        SELECT [連番]                                                       │
│            FROM (                                                          │
│                SELECT [入力D].[順番],                                     │
│                       ROW_NUMBER() OVER(ORDER BY [入力D].[順番] ASC)      │
│                                                                   AS [連番]│
│                    FROM [表] AS [入力D]                                   │
│                    WHERE [入力D].[組No] = [表].[組No]                     │
│            ) AS [入力D]                                                   │
│            WHERE [入力D].[順番] = [表].[順番]                             │
│    );                                                                      │
└──────────────────────────────────────┘
分類:MSSQL