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

Sådan returneres tomme grupper i SQL GROUP BY-sætning

Ja, konstruer et udtryk, der kun returnerer ordretotalen for adhoc, og 0 for de andre, og et andet, der gør det modsatte, og summer disse udtryk. Dette vil inkludere en række pr. lokation med to kolonner, en for adhoc og en for Contracted...

 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

hvis du virkelig ønsker separate rækker for hver, så ville en fremgangsmåde være at:

 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


  1. SQL Server og Oracle, hvilken er bedst med hensyn til skalerbarhed?

  2. Hvordan finder man alle fremmednøgler?

  3. Flere Hibernate-sekvensgeneratorer til én enhed med PostgreSQL

  4. oracle - konverter mange datoformater til en enkelt formateret dato