sql >> Databáze >  >> RDS >> Sqlserver

ZOBRAZIT VŠE Data mezi dvěma daty; pokud pro konkrétní datum neexistuje žádný řádek, zobrazte ve všech sloupcích nulu

;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

Musíte vytvořit data, takže jsem zde použil rekurzivní společný tabulkový výraz.SQL Fiddle

MAXRECURSION číslo

Určuje maximální počet rekurzí povolených pro tento dotaz. číslo je nezáporné celé číslo mezi 0 a 32767. Je-li zadáno 0, nepoužije se žádné omezení. Pokud tato možnost není zadána, výchozí limit pro server je 100.

Když je během provádění dotazu dosaženo zadaného nebo výchozího čísla pro limit MAXRECURSION, dotaz se ukončí a vrátí se chyba.



  1. YEAR() Příklady v SQL Server (T-SQL)

  2. Vyberte číslo řádku v postgresu

  3. Jak naplánovat zálohování databáze pomocí ClusterControl

  4. Získejte seznam všech funkcí a procedur v databázi Oracle