Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment retourner des groupes vides dans la clause SQL GROUP BY

Oui, construisez une expression qui renvoie le ordertotal pour adhoc uniquement, et 0 pour les autres, et une autre qui fait le contraire, et additionnez ces expressions. Cela comprendra une ligne par emplacement avec deux colonnes, une pour ad hoc et une pour contracté...

 SELECT Location,  
     Sum(Case When Contract_ID Is Null Then OrderTotal Else 0 End) AdHoc,
     Sum(Case When Contract_ID Is Null Then 0 Else OrderTotal  End) Contracted
 FROM Orders 
 GROUP BY Location

si vous voulez vraiment des lignes séparées pour chacun, alors une approche serait de :

 SELECT Location, Min('AdHoc') ContractStatus,
     Sum(Case When Contract_ID Is Null 
              Then OrderTotal Else 0 End) OrderTotal
 FROM Orders 
 GROUP BY Location
 Union
 SELECT Location, Min('Contracted') ContractStatus,
     Sum(Case When Contract_ID Is Null 
              Then 0 Else OrderTotal  End) OrderTotal
 FROM Orders 
 GROUP BY Location
 Order By Location