對於報告我正在查資料,我有這個疑問在這裏:開始從一週從輸入日期顯示爲列
select
gam.bank_id,
gam.sol_id,
gam.acct_crncy_code Account_Currency,
gam.gl_sub_head_code GLSH_Code,
gam.foracid,
(select tran_date_bal from tbaadm.eab
where eab.eod_date = (select max(eab.eod_date) from tbaadm.eab
where gam.acid = eab.acid
and eab.eod_date <= '3-Jun-2013')
and gam.acid = eab.acid
and gam.bank_id = eab.bank_id) balance_1,
它得到一個帳戶的結束日結餘取決於輸入的結束日期。接下來我需要做的是顯示賬戶的EOD餘額整整一週(在這種情況下,自2013年6月3日起是我的輸入日期,我還需要在6月2日之前顯示賬戶的EOD餘額, 6月1日...截至5月28日)。我還需要將它們顯示爲結果集中的列。到目前爲止,我所做的是這樣的:
(select tran_date_bal from tbaadm.eab
where eab.eod_date = (select max(eab.eod_date) from tbaadm.eab
where gam.acid = eab.acid
and eab.eod_date <= to_date('3-Jun-2013') - 1)
and gam.acid = eab.acid
and gam.bank_id = eab.bank_id) balance_2,
(select tran_date_bal from tbaadm.eab
where eab.eod_date = (select max(eab.eod_date) from tbaadm.eab
where gam.acid = eab.acid
and eab.eod_date <= to_date('3-Jun-2013') - 2)
and gam.acid = eab.acid
and gam.bank_id = eab.bank_id) balance_3
.
.
.
(select tran_date_bal from tbaadm.eab
where eab.eod_date = (select max(eab.eod_date) from tbaadm.eab
where gam.acid = eab.acid
and eab.eod_date <= to_date('3-Jun-2013') - 6)
and gam.acid = eab.acid
and gam.bank_id = eab.bank_id) balance_7
正如你所看到的,是的,我非常硬編碼的該死的東西。事情是,當我越來越多地澄清報告的規格時,我需要添加更多列,這些列還會查看日期的哪幾天(2013年6月3日是星期一,6月2日是星期日...... 5月28日是週二)以及這些日期的相應匯率。當然,按照這個速度,對這些事情進行硬編碼只會使查詢過於臃腫,並且在將來可能還會有其他數據,我必須從輸入日期前一整週開始提取。
我現在的問題是,如果在Oracle中有另一種更高效的方式來執行此操作,其中查詢查找從一週開始直到給定日期的數據,並且數據將顯示爲查詢中的列。