process de calcul complexe entre les lignes l'un d'entre eux peut être nul

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