3

このようなテーブルがあります

Name         Qty   
-----        -----
BD             2
SD             1
XE             3

Qtyフィールド値に応じて繰り返されるこのテーブル レコードを返す必要があります。たとえば、最初の行はすべて同じ値で 2 回繰り返されます。

FOR Select戻りパラメータを持つストアド プロシージャ内でネストされたものを使用することを考えていました

For Select name, qty from mytable into :name, :qty do
  begin
    if (qty > 1 ) then begin
      i = 1; -- should I start from 2 ?
      while (i <= :qty) do
      begin

        for select name, qty from mytable into :name1, :qty1 do ...

        SUSPEND;

        i = i + 1;
      end


    end

    SUSPEND;
end

このストアド プロシージャは正しい結果を返すことができますか、それとも別の方法を使用する必要がありますか?

私は FireBird 2.5 を使用していますが、以前の SQL のタイプミスは破棄してください。主なアイデアだけを探しています。

4

2 に答える 2

3

Numbers テーブルがある場合、これは簡単です。

SELECT
    OT.Name
FROM
    OrigTable AS OT
    INNER JOIN Numbers AS N ON N.Number BETWEEN 1 AND OT.Qty

私は Firebird には詳しくありませんが、この非常に単純な構文が当てはまると信じています。

于 2013-10-18T18:44:23.640 に答える