次のデータを含むテーブルがあるとします
顧客テーブル:
Name amount date_created invoice_number
--------------------------------------------------
John 50 11April2012 12
Bob 150 15April2012 32
David 506 10May2012 52
Paul 80 12Aug2012 12
Mark 10 11Jan2012 52
要約表:
Name amount
---------------------
Sally 250
Darren-32 150
date_createdがcurrent_quarterのstart_dateとend_dateの間にあるすべての行を選択したいと思います。date_createdが現在の四半期内にある場合、挿入ステートメントを実行する前に、名前にinvoice_numberを追加したいと思います(上記の要約表の例を参照してください)。
INSERT summary(name, amount)
SELECT name|| '-' || invoice_number, date_created, invoice_number
From Customer;
上記を変更して、「デコード」関数または「ケース」関数(またはその他の「IFステートメント」タイプの関数)を使用してdate_createdの値を確認し、date_createdが現在の四半期内にある場合はinvoice_numberを追加するにはどうすればよいですか。
明らかに、私は現在の四半期の開始日と終了日を知る必要があり、比較を行う前にそれらをどこかに保存する必要があります。これは純粋なSQLでまったく可能ですか?PL/SQLはオプションではありません。
第1四半期(4月から6月)にいるとすると、最終結果は次のようになります。
Name amount
---------------------
Sally 250
Darren-32 150
John-12 50
Bob-32 150
David-52 506
Paul 80
Mark 10
Oracle 10GデータベースからCustomerテーブルを読み取り、SQLサーバーデータベースにある「Summary」テーブルにサマリーを入力しています。SQLServerデータベースに挿入しているという事実は実際には重要ではありません。Oracleデータベースからデータを読み取っているので、構文はOracle互換である必要があります。