good-arrow’s blog

https://good-arrow.net/

SQL Server でテーブルの値の数分のレコードを作成。
表1から表2を作成する。

表1

ID 行数
101 3
102 5

表2

ID No
101 1
101 2
101 3
102 1
102 2
102 3
102 4
102 5



表1の作成(元テーブル)

CREATE TABLE RowList (
    ID  INT, 
    Row INT  -- 作成したい行数
);

INSERT RowList VALUES (1,11)
INSERT RowList VALUES (2,22)

表2の作成

SELECT
    ID,
    RowNo
FROM (
        -- TOP(101)はIDあたりの最大行数。「-1」するとRowNoが0開始。
        SELECT TOP (101) ROW_NUMBER() OVER (ORDER BY T1.object_id)-1 AS RowNo
        FROM sys.columns AS T1 cross join sys.columns AS T2
    ) AS T CROSS JOIN (
        SELECT ID,Row
        FROM RowList
    ) AS L
WHERE T.RowNo <= L.Row
ORDER BY ID,RowNo