Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So geben Sie leere Gruppen in der SQL GROUP BY-Klausel zurück

Ja, konstruieren Sie einen Ausdruck, der die Bestellsumme nur für Ad-hoc und 0 für die anderen zurückgibt, und einen weiteren, der das Gegenteil bewirkt, und summieren Sie diese Ausdrücke. Dies umfasst eine Zeile pro Standort mit zwei Spalten, eine für Ad-hoc und eine für Vertraglich...

 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

Wenn Sie wirklich getrennte Zeilen für jeden haben möchten, dann wäre ein Ansatz:

 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