使用Sum函数连接多个表的SQL查询

时间:2014-02-12 19:06:39

标签: mysql sql join

我需要合并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很新(几个月),我真的很想做更复杂的查询,所以如果你知道一个好的资源或教程,请告诉我。

谢谢!

1 个答案:

答案 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

如果您想加入客户端表,请查找该表中的哪个字段与感兴趣的表之间存在关联。