2

SQL で数量による簡単なブレークアウトを実行したいと思います。

私は次のように持っています:

テーブル名 : 商品

product    quantity
=======    ========
Car        2
Bike       1

結果:

Car
Car
Bike

ありがとう!

4

2 に答える 2

3

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)

SQL Fiddle での実例。

于 2012-08-13T16:46:05.040 に答える
1

これは、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
于 2012-08-13T16:52:52.680 に答える