2 kongkpc kongkpc 于 2014.12.18 20:40 提问

有关sql查询重复使用的问题

看一下这样的语句行不行。

SELECT 
IF(loan.custType = 0,cu.name,ecu.name) AS 借款人,
ROUND(loan.appAmount / 10000,2) AS 贷款本金(万元), 
loan.rate AS 实际利率, 
ROUND(CASE loan.rateType 
WHEN 1 THEN loan.rate * 12 
WHEN 2 THEN loan.rate * 12 * 30 
ELSE loan.rate END,2) AS 年化利率, 
amo.rat AS 当月实收利息, 
(SELECT com.commission 
FROM fc_commission AS com 
WHERE com.isenabled = 1 
ORDER BY com.id DESC LIMIT 1) AS 提成率, 
当月实收利息 * 提成率 / 100 AS 当月应计提成
FROM fc_amountrecords AS amo 
LEFT JOIN fc_loancontract AS loan  ON amo.contractId = loan.id 
LEFT JOIN crm_customerinfo AS cu ON cu.id = loan.customerId 
LEFT JOIN crm_ecustomer AS ecu ON ecu.id = loan.customerId;

要达到“当月应计提成”的效果需要怎样做?

1个回答

save4me
save4me   Ds   Rxr 2014.12.18 21:52

你这不行。不知道你用的是什么数据库,MS SQL SERVER和MY SQLSELECT里不能用IF,需要用CASE。另外,语句里除了在ORDER BY能用SELECT里的别名外,不能直接在其他地方用别名引用。你可以把下面的部分提取出来,剩余的部分作用From部分,把提取出来的用作SELECT,当然你可以加上新的From的其他字段。
(SELECT com.commission
FROM fc_commission AS com
WHERE com.isenabled = 1
ORDER BY com.id DESC LIMIT 1) AS 提成率,
当月实收利息 * 提成率 / 100 AS 当月应计提成

kongkpc
kongkpc 回复save4me: 字段写一遍会增加代码,况且之后的字段还要相应的运算,写多一遍不划算。
接近 3 年之前 回复
save4me
save4me 也谢谢你,我查了一下,mysql里面确实有if的用法。要在sql计算,不用别名,字段写一遍也可以,比如:(((SELECT com.commission FROM fc_commission AS com WHERE com.isenabled = 1 ORDER BY com.id DESC LIMIT 1)) * amo.rat / 100) AS 当月应计提成
接近 3 年之前 回复
kongkpc
kongkpc 还有谢谢,我找到别的方法解决这个问题了,计算的事情交给系统其他部分就行了,这个sql语句不是最终输出,输出前进行计算就行了。
接近 3 年之前 回复
kongkpc
kongkpc mysql 有if(1,2,3)。
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!