Maison >base de données >tutoriel mysql >Comment effectuer une sommation conditionnelle dans les requêtes MSSQL Group By ?

Comment effectuer une sommation conditionnelle dans les requêtes MSSQL Group By ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-08 07:08:40719parcourir

How to Perform Conditional Summation in MSSQL Group By Queries?

Somme conditionnelle avec la clause GROUP BY de MSSQL

Microsoft SQL Server (MSSQL) offre une agrégation flexible des données à l'aide de la clause GROUP BY. Pour effectuer une sommation conditionnelle dans une requête GROUP BY, utilisez l'instruction CASE pour inclure de manière sélective des valeurs dans la somme en fonction de critères spécifiques.

Considérons un OrderDetails tableau avec la structure suivante :

<code>----------------------------------------------------------------
|  OrderId  |  CopyCost  |  FullPrice  |  Price  |  PriceType  |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------
|  16       |  50        |  100        |  100    |  FullPrice  |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------
|  16       |  50        |  100        |  50     |  CopyCost   |
----------------------------------------------------------------</code>

Pour calculer les ItemCount, TotalCopyCost et TotalFullPrice pour chaque OrderId, utilisez cette requête :

<code class="language-sql">SELECT OrderId, 
       COUNT(*) AS ItemCount,
       SUM(CASE WHEN PriceType = 'CopyCost' THEN Price ELSE 0 END) AS TotalCopyCost,
       SUM(CASE WHEN PriceType = 'FullPrice' THEN Price ELSE 0 END) AS TotalFullPrice
FROM OrderDetails
GROUP BY OrderId;</code>

L'instruction CASE dans la fonction SUM() additionne conditionnellement les valeurs Price. Si PriceType est 'CopyCost', le Price est inclus ; sinon, 0 est ajouté. Cela permet d'obtenir des totaux distincts pour « CopyCost » et « FullPrice » par OrderId.

Le résultat serait :

<code>----------------------------------------------------------------
|  OrderId  |  ItemCount  |  TotalCopyCost  |  TotalFullPrice  |
----------------------------------------------------------------
|  16       |  4          |  150            |  100             |
----------------------------------------------------------------</code>

Cela démontre comment les instructions CASE permettent une puissante agrégation conditionnelle au sein des requêtes GROUP BY, fournissant une méthode flexible pour la synthèse et l'analyse des données dans MSSQL.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn