j'ai un process de calcul complexe sur la ligne je veux faire la multiplication de deux champs (val1) si ma condition est égale à vrai puis faire une autre multiplication de deux autres champs (val 2) Ensuite, je calcule le pourcentage des valeurs totales ((val1 + val2) * 10%) / 100 le problème est que toute condotion peut être égale à false alors le résultat égal à null c'est mon code
SELECT DISTINCT r.paymentDate as "Payment Date" , r.recivedID as "Recived ID" , f.farmerName as "Farmer Name" , ra.tips as "percentage ", ( ( (SELECT SUM(od.price * od.kilo) FROM orderDetailsTBL od WHERE od.recivedID = r. recivedID AND r.status = @STATUS AND od.calcType = 'k') + (SELECT SUM(od.quant * od.price) FROM orderDetailsTBL od WHERE od.recivedID = r. recivedID AND r.status = @STATUS AND od.calcType = 'n') ) * ra.tips) / 100 as [amount] FROM recivedTBL r JOIN farmerTBL f ON f.farmerID = r.farmerID JOIN recivedAccTBL ra ON ra.recivedID = r.recivedID JOIN orderDetailsTBL od ON od.recivedID = r.recivedID WHERE (r.paymentDate BETWEEN @D1 AND @D2) AND r.status = @STATUS
cette requête ne renvoie pas de valeur si la condition de sous-requête est égale à false pour exampel:
(SELECT SUM(od.quant * od.price) FROM orderDetailsTBL od WHERE od.recivedID = r. recivedID AND r.status = @STATUS AND od.calcType = 'n') ) * ra.tips) / 100
si cette sous-requête est égale à false, la valeur returnnée sera nulle
c'est ce que tu veux?
SELECT r.paymentDate as "Payment Date", r.recivedID as "Recived ID", f.farmerName as "Farmer Name", ra.tips as "percentage", SUM((CASE WHEN od.calcType = 'k' THEN od.price * od.kilo WHEN od.calcType = 'n' THEN od.quant * od.price END) * ra.tips) / 100 as [amount] FROM recivedTBL r JOIN farmerTBL f ON f.farmerID = r.farmerID JOIN recivedAccTBL ra ON ra.recivedID = r.recivedID JOIN orderDetailsTBL od ON od.recivedID = r.recivedID WHERE r.paymentDate BETWEEN @D1 AND @D2 AND r.status = @STATUS GROUP BY r.paymentDate, r.recivedID, f.farmerName, ra.tips;
Enveloppez votre calcul entier pour "montant" dans:
COALESCE(<your-calc>, 0) as [amount]
Cela returnnera un zéro si votre calcul returnne NULL