MW211 EXIT

devlog
SQL/中間階層の前詰
2015年07月04日
大列、中列、小列のある表で、中列を前詰にしたい場合
┌─────┐  ┌─────┐
│大  中  小│→│大  中  小│
│--  --  --│  │--  --  --│
│A    3   1│  │A    1   1│
│A    3   2│  │A    1   2│
│A    5   1│  │A    2   1│
│A    5   2│  │A    2   2│
└─────┘  └─────┘
┌──────────────────────────────────────┐
│UPDATE 表                                                                   │
│    SET 中列 = 入力D.新中列                                                │
│    FROM 表 AS 出力D                                                       │
│        INNER JOIN (                                                        │
│            SELECT 大列,                                                    │
│                   中列,                                                    │
│                   RANK() OVER(                                             │
│                       PARTITION BY 大列                                    │
│                       ORDER BY 中列 ASC                                    │
│                   ) AS 新中列                                              │
│                FROM (                                                      │
│                    SELECT DISTINCT 大列,                                   │
│                                    中列                                    │
│                        FROM 表                                             │
│                ) AS 中D                                                   │
│        ) AS 入力D                                                         │
│          ON  入力D.大列 = 出力D.大列                                     │
│          AND 入力D.中列 = 出力D.中列;                                    │
└──────────────────────────────────────┘
分類:SQL