Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zwrócić puste grupy w klauzuli SQL GROUP BY?

Tak, skonstruuj wyrażenie, które zwraca sumę porządków tylko dla adhoc, 0 dla pozostałych i inne, które działa odwrotnie, i zsumuj te wyrażenia. Obejmuje to jeden wiersz na lokalizację z dwiema kolumnami, jedną dla adhoc i jedną dla zakontraktowanych...

 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

jeśli naprawdę chcesz osobnych wierszy dla każdego, jednym podejściem byłoby:

 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Podstawy SQL Server Instrukcja ALTER TABLE

  2. Synchronizowanie baz danych SQL Server 2008 przez HTTP przy użyciu WCF i Sync Framework

  3. Jaki jest cel używania CommandType.Tabledirect?

  4. Plan oparty na zestawach działa wolniej niż funkcja o wartości skalarnej z wieloma warunkami

  5. Znajdowanie kolejności węzłów w dokumencie XML w SQL Server