メモ
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
実行イメージ