Somme SQL avec condition (y compris les calculs mensuels)
Vous disposez d'une grande instruction SQL qui calcule le montant total en espèces pour chaque transaction unique ID en utilisant la ligne suivante :
select sum(cash) from Table a where a.branch = p.branch and a.transID = p.transID) TotalCash
Maintenant, vous devez modifier le relevé pour ne totaliser que les valeurs de trésorerie qui ont une ValueDate dans le mois dernier. Voici une solution :
select sum(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END) from Table a where a.branch = p.branch and a.transID = p.transID) TotalMonthCash
Explication
L'instruction CASE utilise la syntaxe de l'expression CASE recherchée pour évaluer une expression booléenne (dans ce cas, WHEN ValueDate > @ startMonthDate) et renvoie un résultat correspondant (ici, cash). Si la condition n'est pas remplie, elle renvoie 0 à la place.
Conseil d'optimisation
Si les performances posent problème, envisagez d'utiliser JOIN et GROUP BY au lieu d'une sous-requête dépendante. pour une meilleure efficacité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!