メモ
TOP 句には、式も渡せるのでサブクエリも使える
TOP (Transact-SQL)
行数を増やすには、単純な連番テーブルと必要な数だけマッチする条件で結合したらよい。
単純な連番テーブルは、CTE で作成
今回の例では、元のデータをあるカラムに入っている値の数だけ増加させるという例
use [TEST]
CREATE TABLE [テスト] (
[Id] int identity(1, 1) primary key,
[名前] nvarchar(30),
[分割件数] int not null
)
GO
INSERT INTO [テスト] ( [名前], [分割件数] ) VALUES
('10個に増やす', 10),
('5個に増やす', 5),
('1個のまま', 1),
('3個に増やす', 3)
GO
SELECT * FROM [テスト]
GO
WITH [CTE](行連番) AS (
SELECT 1
UNION ALL
SELECT [行連番] + 1
FROM [CTE]
)
SELECT
[テスト].[Id]
, [テスト].[名前]
, [テスト].[分割件数]
, [DUMMY].[行連番]
FROM
[テスト] INNER JOIN (
SELECT TOP ((SELECT MAX([テスト].[分割件数]) FROM [テスト]))
[行連番]
FROM [CTE]
-- ORDER BY [行連番] ここに ORDER BY いれると、無限ループするよ
) [DUMMY] ON (
[DUMMY].[行連番] <= [テスト].[分割件数]
)
ORDER BY
[テスト].[Id]
, [DUMMY].[行連番]
OPTION (MAXRECURSION 0)
GO
DROP TABLE [テスト]
GO
実行イメージ