MySQL查询的WHERE子句中的CASE

时间:2020-04-24 19:51:15

标签: mysql mariadb

每当我在Where子句中使用case语句时,它就不再执行。我不太了解它如何工作。如果有人可以提供帮助,我将不胜感激。

SET @pdd=2;

SELECT I.PAIDDATE AS InvPaidDate, i.CASEID, a.PSO, a.NAME, a.ROLES, a.TotalAmt, i.COMMENT, (i.AMOUNT-a.TotalAmt) AS BALANCE, i.AMOUNT AS InvAmount, a.FirstPayDate, a.LastPayDate, a.PayDayDiff, DATE_FORMAT(a.LastPayDate,'%M') AS MonthName, DATE_FORMAT(a.LastPayDate,'%m') AS MonthNumber, DATE_FORMAT(a.LastPayDate,'%Y') AS PaymentYear, a.Installment, CASE WHEN a.PayDayDiff<=31 THEN 'Yes' ELSE 'No' END AS BonusStatus
FROM (
    SELECT c.CASEID, c.PSO, c.NAME, c.ROLES, Sum(c.AMOUNT) AS TotalAmt, Count(c.CASEID) AS Installment, Max(c.PAIDDATE) AS LastPayDate, Min(c.PAIDDATE) AS FirstPayDate, DATEDIFF (Max(c.PAIDDATE), Min(c.PAIDDATE)) AS PayDayDiff
    FROM commission_details c
    WHERE c.PC="EE" AND c.STATUS="SUCCESS" AND c.PAIDDATE BETWEEN '2020-01-04' AND '2020-04-30'
    GROUP BY c.CASEID, c.PSO, c.NAME, c.ROLES
    ORDER BY c.CASEID)a
JOIN (SELECT * FROM invoices) i ON a.CASEID=i.CASEID
WHERE 
(CASE
    WHEN @pdd=1 THEN a.PayDayDiff<=31
    WHEN @pdd=2 THEN a.PayDayDiff=31
    WHEN @pdd=3 THEN a.PayDayDiff=>31
ELSE a.PayDayDiff<=31
END)
HAVING BALANCE<=0
ORDER BY i.CASEID

0 个答案:

没有答案
相关问题