1

誰かが私の問題を解決してくれることを願っています。単一の SELECT ステートメントで作成する必要があります (使用しているシステムには、単一の SELECT を処理する Excel のピボット テーブルがいくつかあります)。

多くのフィールドを持つ INL (Invoice Lines) テーブルがありますが、重要なのは日付です。

INL_ID    DATE
  19    2004-03-15 00:00:00.000
  20    2004-03-15 00:00:00.000
  21    2004-03-15 00:00:00.000
  22    2004-03-16 00:00:00.000
  23    2004-03-16 00:00:00.000
  24    2004-03-16 00:00:00.000

これで、ID フィールドによって INL テーブルに関連付けられた ILD (Invoice Line Details) も作成されました。2 番目のテーブルの scu_qty フィールドを使用して、結果シートの最初のテーブルの値を「繰り返す」必要があります。

必要な ILD テーブル値は次のとおりです。

INL_ID    scu_qty
19          1
20          1
21          1
22          4
23          4

ここで、scu_qty を使用して、最初のテーブルの値を繰り返し、各レコードに 1 日を追加する必要があります。scu_qty は、ILD テーブルで販売するサービスの日数です。

したがって、次のようなものを取得する必要があります (SCU_QTY で 1 とは異なる値を持つ INL_ID 22 を表示します)。選択の結果は次のようになります。

INL_ID  DATE
22  2004-03-15  0:00:00
22  2004-03-16  0:00:00
22  2004-03-17  0:00:00
22  2004-03-18  0:00:00

この情報では、繰り返して計算する必要があるフィールドのみを書きました。もちろん、さらに多くのフィールドが必要になりますが、INL テーブルから繰り返されるため、混乱しないようにそれらを配置しません。

このレポートは私たちにとって非常に重要です。事前にどうもありがとう

(私の英語は私の母国語ではないため、申し訳ありません)

4

2 に答える 2

0
select INL.INL_ID, `DATE`
from 
    INL
    inner join
    ILD on INL.INL_ID = ILD.INL_ID
    inner join (
        select 1 as qty union select 2 union select 3 union select 4
    ) s on s.qty <= ILD.scu_qty
order by INL.INL_ID

その副選択の代わりに、数量が少し大きい場合はテーブルが必要になります。または、RDBMS を教えてください。もっと簡単な方法があります。

于 2012-09-25T16:45:32.650 に答える
0
SELECT INL_ID, scu_qty, CalculatedDATE ...  
FROM INL  
INNER JOIN ILD ON ...  
INNER JOIN SequenceTable ON SequenceTable.seqNo <= ILD.scu_qty
ORDER BY INL_ID, SequenceTable.seqNo

SQL フレーバーによっては、日付操作関数を検索する必要があります。
CalculatedDATE = {INL.DATE + SequenceTable.seqNo (days)}

于 2012-09-25T16:10:33.467 に答える