sql >> Database >  >> RDS >> Sqlserver

TOON ALLE data tussen twee data; als er geen rij bestaat voor een bepaalde datum, toon dan nul in alle kolommen

;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

Je moet de datums verzinnen, dus ik heb hier een recursieve algemene tabeluitdrukking gebruikt.SQL Fiddle

MAXRECURSION-nummer

Specificeert het maximum aantal toegestane recursies voor deze query. getal is een niet-negatief geheel getal tussen 0 en 32767. Als 0 is opgegeven, wordt er geen limiet toegepast. Als deze optie niet is opgegeven, is de standaardlimiet voor de server 100.

Wanneer het opgegeven of standaardgetal voor de MAXRECURSION-limiet wordt bereikt tijdens het uitvoeren van de query, wordt de query beëindigd en wordt er een fout geretourneerd.



  1. 11 manieren om dubbele rijen te vinden terwijl de primaire sleutel in SQLite wordt genegeerd

  2. Charlotte SQL Server-gebruikersgroep:langzame zoekopdrachten oplossen. Snel.

  3. Verticaal schalen PostgreSQL

  4. ODBC 4.0