0

次のデータを含むテーブルがあるとします

顧客テーブル:

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互換である必要があります。

4

3 に答える 3

1
declare @CurrentQtr int
set @CurrentQty = CASE
  WHEN datepart(month, getdate()) in (1,2,3) THEN 1
  WHEN datepart(month, getdate()) in (4,5,6) THEN 2
  WHEN datepart(month, getdate()) in (7,8,9) THEN 3
  ELSE 4 END

SELECT name + case 
  WHEN datepart(month, date_created) in (1,2,3) AND @CurrentQtr = 1 THEN '-' + invoice_number 
  WHEN datepart(month, date_created) in (4,5,6) AND @CurrentQtr = 2 THEN '-' + invoice_number 
  WHEN datepart(month, date_created) in (7,8,9) AND @CurrentQtr = 3 THEN '-' + invoice_number 
  WHEN datepart(month, date_created) in (10,11,12) AND @CurrentQtr = 4 THEN '-' + invoice_number 
  ELSE '' end as Name, amount
From Customer;
于 2012-06-28T18:02:00.383 に答える
1

このようなもの?

 insert summary
 Select 
     Name || case 
         when datepart(dp_quarter, sysdate)=datepart(dp_quarter, date_Created)
   and extract(year from sysdate) = extract(year from date_Created) 
         then '-' || invoice_number
         else '' end,
 amount from Customer
于 2012-06-28T18:12:35.390 に答える
1

2つの箇条書きで説明することを行うためのOracle構文は次のようになります

SELECT (CASE WHEN     date_created >= trunc(sysdate,'Q') 
                  AND date_created < trunc(add_months(sysdate,3),'Q')
             THEN name || '-' || invoice_number
             ELSE name
         END),
       date_created, 
       invoice_number
  FROM Customer;
于 2012-06-28T18:06:04.307 に答える