Всякий раз, когда я использую оператор case в предложении Where, он больше не выполняется. Я не очень понимаю, как это будет работать. Буду признателен, если кто-нибудь сможет помочь.
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