sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo devolver grupos vacíos en la cláusula SQL GROUP BY

Sí, construye una expresión que devuelva el ordertotal solo para adhoc, y 0 para los demás, y otra que haga lo contrario, y suma esas expresiones. Esto incluirá una fila por ubicación con dos columnas, una para adhoc y otra para Contratado...

 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 realmente quiere filas separadas para cada una, entonces un enfoque sería:

 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