sql >> Database >  >> RDS >> Sqlserver

Lege groepen retourneren in de SQL GROUP BY-clausule

Ja, construeer een uitdrukking die het ordertotaal alleen voor adhoc retourneert, en 0 voor de anderen, en een andere die het tegenovergestelde doet, en som die uitdrukkingen op. Dit omvat één rij per locatie met twee kolommen, één voor adhoc en één voor 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

als je echt aparte rijen voor elk wilt, dan zou een benadering zijn om:

 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. Controleer of de kolom bestaat als er meerdere tabellen met dezelfde naam in verschillende schema's zijn (PSQL 8.2)

  2. SQL hoe twee kolommen uit twee verschillende tabellen te vergelijken

  3. Een kolom invoegen in een andere kolom binnen dezelfde tabel in SQL Server

  4. Het selecteren van de dichtstbijzijnde geografische coördinaten met behulp van de ruimtelijke index op de mysql-tabel werkt niet