SQL で数量による簡単なブレークアウトを実行したいと思います。
私は次のように持っています:
テーブル名 : 商品
product quantity
======= ========
Car 2
Bike 1
結果:
Car
Car
Bike
ありがとう!
SQL で数量による簡単なブレークアウトを実行したいと思います。
私は次のように持っています:
テーブル名 : 商品
product quantity
======= ========
Car 2
Bike 1
結果:
Car
Car
Bike
ありがとう!
1 つの解決策は、数値の表に結合することです。これにより、行時間を繰り返すことができquantity
ます。T-SQL では、再帰 CTE を使用して数値のリストを生成できます。
; with Numbers as
(
select max(quantity) as nr
from YourTable
union all
select nr - 1
from Numbers
where nr > 1
)
select yt.product
from YourTable yt
join Numbers nr
on nr.nr <= yt.quantity
option (maxrecursion 0)
これは、CTEを使用する必要がある理由を示す非CTEの回答です:)
メインテーブル
DECLARE @table TABLE
(
ID INT IDENTITY,
Product VARCHAR(20),
Quantity INT
)
アウトテーブル
DECLARE @outtable TABLE
(
ID INT IDENTITY,
Product VARCHAR(20)
)
テストデータ
INSERT INTO @table
(
Product,
Quantity
)
SELECT 'Car',
2
UNION ALL
SELECT 'Bike',
1
メインクエリ
DECLARE @counter INT,
@maxcounter INT,
@curproduct INT
SELECT TOP 1
@curproduct = id
FROM @table
WHILE EXISTS ( SELECT TOP 1
1
FROM @table
WHERE ID >= @curproduct )
BEGIN
SELECT @counter = 1,
@maxcounter = quantity
FROM @table
WHERE ID = @curproduct
WHILE @counter <= @maxcounter
BEGIN
INSERT INTO @outtable
(
Product
)
SELECT product
FROM @table
WHERE id = @curproduct
SET @counter = @counter + 1
END
SET @curproduct = @curproduct + 1
END
最後に
SELECT *
FROM @outtable