Calcul de la somme avec filtrage conditionnel en SQL
Lorsque vous traitez des instructions SQL volumineuses, il est souvent nécessaire de calculer des valeurs récapitulatives. Cependant, il est parfois nécessaire de considérer uniquement un sous-ensemble de données en fonction d’une condition spécifique. Cet article explique comment modifier un relevé existant pour calculer la somme des valeurs de rachat pour les identifiants de transaction uniques, mais uniquement pour ceux dont la date de valeur est au cours du mois dernier.
Problème :
Pour calculer le montant total en espèces pour chaque ID de transaction dans une instruction SQL complexe, le code suivant est utilisé :
select sum(cash) from Table a where a.branch = p.branch and a.transID = p.transID) TotalCash
Cependant, le but est de modifier cette déclaration pour additionner uniquement les valeurs de trésorerie qui ont une date de valeur au cours du mois dernier.
Solution :
Le code révisé doit remplacer l'expression CASE d'origine par ce qui suit :
SUM(CASE WHEN ValueDate > @startMonthDate THEN cash ELSE 0 END)
Explication :
L'expression CASE dans votre code d'origine était incorrecte syntaxe. La syntaxe SEARCH CASE est requise dans ce cas car une expression booléenne est en cours d'évaluation pour déterminer le résultat :
CASE WHEN Boolean_expression THEN result_expression [ ...n ] [ ELSE else_result_expression ] END
Dans le code révisé, l'expression CASE vérifie si le ValueDate est supérieur au @startMonthDate. Si tel est le cas, le montant en espèces est inclus dans le calcul ; sinon, il est remplacé par 0. Cela garantit que seules les valeurs de rachat du mois dernier sont prises en compte.
Considérations relatives aux performances :
Si les performances deviennent un problème, il est Il est recommandé d'envisager d'utiliser un JOIN et un GROUP BY au lieu d'une sous-requête dépendante. Cela peut améliorer la vitesse d'exécution de l'instruction.
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!