上回我們留下三個問題:
- 如果有些日期的某些科目沒有值,這時顯示會有錯誤,系統會將數值誤值至其他科目。
- 通常日期會有不定個數,上述方法只顯示兩期(f_20050601, f_20050701),但資料其實不只兩期,我們需先執行 select distinct datekey' from account_data 才能知道有多少期。
- 每個個案的日期個數不同,甚至資料表不同,我們每次都要改寫crosstab嗎? 能不能寫成一個通用的function呢?
crosstab另外提供一個參數 VALUES,設定欄位的名稱,設定後數值即會依照欄位名稱正確擺放,SQL修正如下:
SELECT output_table1.* FROM crosstab(
'SELECT
i1.account_code::text As col_name,
i2.datekey::integer As row_name,
i2.account_amount::double precision As cell_value
FROM tejdb.account_profile i1
JOIN tejdb.account_data As i2
ON (i1.account_code = i2.account_code)
where i1.account_code <=6060 and i1.account_code >=6000
order by i1.account_code, i2.datekey'
, $$ values ('20050701'::text), ('20050801')$$
)
As output_table1(account_code text, f_20050701 double precision, f_20050801 double precision);
沒有留言:
張貼留言