1
我想避免使用嵌套的選定語句,如果我可以(我懷疑我會遇到性能問題)。我試圖從財務交易表中獲得每種類型交易的總額。我猜我可以使用同一張表中的多個選擇,但是我的'BFWD'數字通過"bil_yer + 1"
返回結果(不僅僅是原始的bil_yer
)。任何建議將不勝感激。替代嵌套選擇語句
SELECT bil_yer,
acc_num,
ubsgch_key_num,
sum(bfw_arr) AS bfw_arr,
sum(bfw_int) AS bfw_int,
sum(ytd_chg) AS ytd_chg,
sum(ytd_och) AS ytd_och
FROM (
-- BFWD Charges
SELECT src_bil_yer + 1 AS bil_yer,
src_acc_num AS acc_num,
des_ubsgch_key_num AS ubsgch_key_num,
src_trn_amt AS bfw_arr,
0 AS bfw_int,
0 AS ytd_chg,
0 AS ytd_och
FROM av_ub_tran
WHERE src_trn_cde <> 2601
UNION ALL -- BFWD Interest
SELECT src_bil_yer + 1 AS bil_yer,
src_acc_num AS acc_num,
des_ubsgch_key_num AS ubsgch_key_num,
0 AS bfw_arr,
src_trn_amt AS bfw_int,
0 AS ytd_chg,
0 AS ytd_och
FROM av_ub_tran
WHERE src_trn_cde = 2601
UNION ALL -- YTD Current Charges - Raised in the current year but NOT past due
SELECT src_bil_yer AS bil_yer,
src_acc_num AS acc_num,
des_ubsgch_key_num AS ubsgch_key_num,
0 AS bfw_arr,
0 AS bfw_int,
src_trn_amt AS ytd_chg,
0 AS ytd_och
FROM av_ub_tran
WHERE src_trn_cde = 2600
AND src_due_dte >= 'TODAY'
UNION ALL -- YTD Current Overdue Charges - Raised in the current year but PAST due
SELECT src_bil_yer AS bil_yer,
src_acc_num AS acc_num,
des_ubsgch_key_num AS ubsgch_key_num,
0 AS bfw_arr,
0 AS bfw_int,
0 AS ytd_chg,
src_trn_amt AS ytd_och
FROM av_ub_tran
WHERE src_trn_cde = 2600
AND src_due_dte < 'TODAY'
)
GROUP BY
bil_yer,
acc_num,
ubsgch_key_num
您使用的是什麼RDBMS? – valex 2013-02-20 10:29:24