我需要合并5个表:
history - (contract_no, run_date, dataset_code)
premium - (contract_no, trx_amt)
contract - (contract_no, status, owner_idn)
confund - (contract_no, blg_method, blg_status)
client - (client_idn, client_ssn)
最终,我希望结果显示如下:
合同号| Run_Date | DataSet_Code |状态| Blg_Method | Blg_Status | Suspense_Total
我最大的问题是让SUM功能正常工作。高级表中的trx_amt是我获得总悬念的地方。合同可以有很多行。此外,在该表中,trx_amt可以来自contract_no或client_ssn。
SELECT history_contract_no,
history_run_date,
history_dataset_code,
contract_status,
confund_blg_method,
confund_blg_status,
SUM(premium_trx_amt)
FROM HISTORY LEFT JOIN PREMIUM
ON history_contract_no = premium_contract_no JOIN CONFUND
ON history_contract_no = confund_contract_no JOIN CONTRACT
ON confund_contract_no = contract_contract_no
WHERE history_dataset_code in ('CONTINU1', 'CONTINU2')
AND history_run_date between 20140118 and 20140124
GROUP BY history_contract_no
如果没有上面的SUM函数,我可以接近,但如果合约有多个暂停条目,我会得到多行。我无法弄清楚如何在结果中对这些行求和。我甚至无法弄清楚如何引入第五个表" client",这样我就可以总结出位于client_ssn而不是contract_no下的悬疑条目。 premium字段中的contract_no是SSN或contract_no。
我对SQL很新(几个月),我真的很想做更复杂的查询,所以如果你知道一个好的资源或教程,请告诉我。
谢谢!
答案 0 :(得分:0)
要使用Sum函数,您需要在查询中使用“Group By”子句。
尝试这样的事情:
SELECT history_contract_no,
history_run_date,
history_dataset_code,
contract_status,
confund_blg_method,
confund_blg_status,
SUM(premium_trx_amt)
FROM HISTORY LEFT JOIN PREMIUM
ON history_field = premium_contract_no JOIN CONFUND
ON history_field = confund_contract_no JOIN CONTRACT
ON confund_contract_no = contract_contract_no
WHERE history_dataset_code in ('CONTINU1', 'CONTINU2')
AND history_run_date between 20140118 and 20140124
GROUP BY history_contract_no
, history_run_date
, history_dataset_code
, contract_status
, confund_blg_method
,confund_blg_status
如果您想加入客户端表,请查找该表中的哪个字段与感兴趣的表之间存在关联。