sql >> Databasteknik >  >> RDS >> Sqlserver

VISA ALLA datumdata mellan två datum; om det inte finns någon rad för ett visst datum, visa noll i alla kolumner

;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

Du måste göra upp datumen, så jag har använt ett rekursivt vanligt tabelluttryck här.SQL Fiddle

MAXRECURSION nummer

Anger det maximala antalet tillåtna rekursioner för den här frågan. nummer är ett icke-negativt heltal mellan 0 och 32767. När 0 anges tillämpas ingen gräns. Om detta alternativ inte anges är standardgränsen för servern 100.

När det angivna numret eller standardnumret för MAXRECURSION-gränsen nås under queryexecution, avslutas frågan och ett fel returneras.



  1. Vi presenterar uppspelning – ny tidpunktsdiagnos för Spotlight Cloud

  2. Hur man delar upp frågefönster i SQL Server Management Studio (SSMS) - SQL Server / TSQL självstudie del 13

  3. "lösenordsautentisering misslyckades för användare postgres"

  4. OLTP-prestanda sedan PostgreSQL 8.3