Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come restituire gruppi vuoti nella clausola SQL GROUP BY

Sì, costruisci un'espressione che restituisca ordertotal solo per adhoc, e 0 per gli altri, e un'altra che faccia il contrario, e somma queste espressioni. Ciò includerà una riga per posizione con due colonne una per adhoc e una per Contrattato...

 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

se vuoi davvero righe separate per ciascuna, un approccio sarebbe:

 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