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

POKAŻ WSZYSTKIE Daty między dwiema datami; jeśli nie istnieje wiersz dla określonej daty, pokaż zero we wszystkich kolumnach

;with d(date) as (
  select cast('10/01/2012' as datetime)
  union all
  select date+1
  from d
  where date < '10/15/2012'
  )
select t.ID, d.date CDate, isnull(t.val, 0) val
from d
left join temp t
       on t.CDate = d.date
order by d.date
OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart

Musisz wymyślić daty, więc użyłem tutaj rekurencyjnego wyrażenia tabelarycznego.SQL Fiddle

Numer MAXRECURSION

Określa maksymalną liczbę rekursji dozwolonych dla tego zapytania. number jest nieujemną liczbą całkowitą z zakresu od 0 do 32767. W przypadku określenia 0 nie jest stosowany żaden limit. Jeśli ta opcja nie jest określona, ​​domyślnym limitem dla serwera jest 100.

Gdy określona lub domyślna liczba dla limitu MAXRECURSION zostanie osiągnięta podczas wykonywania zapytania, zapytanie zostanie zakończone i zostanie zwrócony błąd.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę połączyć się z SQL Server przy użyciu zintegrowanych zabezpieczeń ze sterownikiem JDBC?

  2. Wyślij e-mail z wyzwalacza w SQL Server (T-SQL)

  3. Schemat serwera SQL i domyślny schemat

  4. nierozwiązane odniesienie do obiektu [INFORMATION_SCHEMA].[TABLES]

  5. Jak wybrać dane tabeli z innej bazy danych w SQL Server?