0

指定した月に行われたすべての誓約のデータを取得して表示する PL/SQL ブロックを作成します。プレッジごとに 1 行の出力が表示されます。出力の各行に次を含めます。

• プレッジ ID、寄付者 ID、プレッジ額
• プレッジが一括払いの場合は、「Lump Sum」と表示します。
• 誓約金が月払いで支払われている場合は、「Monthly - #」と表示します (# は支払月数を表し
ます)。

これがテーブル構造です。

CREATE TABLE DD_Pledge (
                   idPledge number(5),
                   idDonor number(4),
                   Pledgedate DATE,
                   Pledgeamt number(8,2),
                   idProj number(5),
                   idStatus number(2),
                   Writeoff number(8,2),
                   paymonths number(3),
                   Campaign number(4),
                   Firstpledge char(1),
                   CONSTRAINT pledge_id_pk PRIMARY KEY(idPledge),
                   CONSTRAINT pledge_idDonor_fk FOREIGN KEY (idDonor)
                           REFERENCES dd_donor (idDonor), 
                   CONSTRAINT pledge_idProj_fk FOREIGN KEY (idProj)
                           REFERENCES dd_project (idProj),
                   CONSTRAINT pledge_idStatus_fk FOREIGN KEY (idStatus)
                           REFERENCES dd_status (idStatus)); 

レコードを使用しようとしましたが、指定した月に複数の誓約があるとエラーが発生するため、レコードが機能しないようです。レコードを使用してそれを行う方法はありますか (これは、レコードをカバーした後に割り当てられるためです)

カーソルが良い選択かもしれませんが、前述の点から、これを解決する方法を知りたいです。

4

1 に答える 1

2
SELECT
  p.idPledge,
  p.idDonor,
  p.Pledgeamt as this_payment,
  case 
    when p.paymonths = 0 then 'Lump Sum'
    else 'Monthly - ' || p.paymonths 
  end as payment_method
FROM
  dd_pledge p
WHERE
  TRUNC(p.Pledgedate) >= '01-Mar-2010' AND TRUNC(p.Pledgedate) < '01-Apr-2010'  
order by
  4 

必要に応じて月の開始日/終了日を追加するとします。

于 2013-03-28T14:40:58.323 に答える