Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como retornar grupos vazios na cláusula SQL GROUP BY


Sim, construa uma expressão que retorne o ordertotal apenas para adhoc, e 0 para os demais, e outra que faça o contrário, e some essas expressões. Isso incluirá uma linha por local com duas colunas, uma para adhoc e outra para Contrato...
 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 você realmente quiser linhas separadas para cada uma, uma abordagem seria:
 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