【发布时间】:2013-01-04 03:05:45
【问题描述】:
我正在尝试对自定义报告运行查询,该报告应该根据指定日期范围内的贷款还款类型为符合五个条件的客户返回数据。标准为 Salary Deduction、Bank Standing Order、Self-Pay、Post Dated Cheques 和 Bank Debit。结果应返回来自每个指定条件的客户端数量的计数。但是,这不是我目前得到的结果;这些查询正在针对此软件进行测试,Mambu。结果取决于 customfield 和 customfieldvalue(指定要使用的还款类型)列。这就是我期望的结果应该是这样的:
++++++++++++++++++++++++++++++++++++++++++++++++++++++
| LoanProduct | RepaymentType | Clients |
++++++++++++++++++++++++++++++++++++++++++++++++++++++
| JUMPSTART LOAN WEEKLY | Self-Pay | 35 |
------------------------------------------------------
| PAYDAY LOAN MONTHLY | Salary Deduction | 5 |
------------------------------------------------------
| MICRO-BIZ LOAN | Bank Debit | 26 |
------------------------------------------------------
| PAYDAY LOAN WEEKLY | Self-Pay | 1 |
.......
and so on ...
到目前为止我尝试过的解决方案:
查询 #1:
对于这个查询,我只是想取回所有客户,而不计算特定还款类型;它适用于那种情况。
SELECT CONCAT(client.FIRSTNAME, ' ', client.LASTNAME) AS Client,
CONCAT(user.FIRSTNAME, ' ', user.LASTNAME) AS Originator,
loanproduct.PRODUCTNAME AS LoanProduct, customfieldvalue.VALUE AS RepaymentType
FROM client, user, customfieldvalue, loanaccount
INNER JOIN loanproduct ON loanaccount.PRODUCTTYPEKEY = loanproduct.ENCODEDKEY
WHERE client.ASSIGNEDUSERKEY = user.ENCODEDKEY
AND loanaccount.ACCOUNTHOLDERKEY = client.ENCODEDKEY
AND customfieldvalue.VALUE = "Bank Debit"
AND loanaccount.DISBURSEMENTDATE BETWEEN "2012-01-01" AND "2013-01-31"
GROUP BY user.LASTNAME, client.LASTNAME
查询 #1.1
在上面添加OR 不会产生任何结果:
SELECT CONCAT(client.FIRSTNAME, ' ', client.LASTNAME) AS Client,
CONCAT(user.FIRSTNAME, ' ', user.LASTNAME) AS Originator,
loanproduct.PRODUCTNAME AS LoanProduct, customfieldvalue.VALUE AS RepaymentType
FROM client, user, customfieldvalue, loanaccount
INNER JOIN loanproduct ON loanaccount.PRODUCTTYPEKEY = loanproduct.ENCODEDKEY
WHERE client.ASSIGNEDUSERKEY = user.ENCODEDKEY
AND loanaccount.ACCOUNTHOLDERKEY = client.ENCODEDKEY
AND customfieldvalue.VALUE = "Bank Debit" OR customfieldvalue.VALUE = "Self-Pay"
AND loanaccount.DISBURSEMENTDATE BETWEEN "2012-01-01" AND "2013-01-31"
GROUP BY user.LASTNAME, client.LASTNAME
查询 #2
我什至尝试使用CASE 语句执行此操作,但它仅将Clients 的所有行返回为NULL,并且需要大约12.1 秒才能完成。
SELECT
loanproduct.PRODUCTNAME AS LoanProduct, customfieldvalue.VALUE AS RepaymentType,
CASE
WHEN customfieldvalue.VALUE = "Salary Deduction" THEN COUNT(CONCAT(client.FIRSTNAME, ' ', client.LASTNAME))
WHEN customfieldvalue.VALUE = "Bank Standing Order" THEN COUNT(CONCAT(client.FIRSTNAME, ' ', client.LASTNAME))
WHEN customfieldvalue.VALUE = "Self-Pay" THEN COUNT(CONCAT(client.FIRSTNAME, ' ', client.LASTNAME))
WHEN customfieldvalue.VALUE = "Post Dated Cheques" THEN COUNT(CONCAT(client.FIRSTNAME, ' ', client.LASTNAME))
WHEN customfieldvalue.VALUE = "Bank Debit" THEN COUNT(CONCAT(client.FIRSTNAME, ' ', client.LASTNAME))
END AS Clients
FROM client, user, customfieldvalue, loanaccount
INNER JOIN loanproduct ON loanaccount.PRODUCTTYPEKEY = loanproduct.ENCODEDKEY
WHERE client.ASSIGNEDUSERKEY = user.ENCODEDKEY
AND loanaccount.ACCOUNTHOLDERKEY = client.ENCODEDKEY
AND loanaccount.DISBURSEMENTDATE BETWEEN "2012-01-01" AND "2013-01-31"
GROUP BY user.LASTNAME, client.LASTNAME
我在这里做错了什么,导致我无法获得想要的结果?提前致谢。
【问题讨论】: