Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

ПОКАЗВАНЕ НА ВСИЧКИ данни за дати между две дати; ако не съществува ред за определена дата, покажете нула във всички колони

;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

Трябва да съставите датите, така че тук използвам рекурсивен израз на обща таблица.SQL Fiddle

MAXRECURSION номер

Указва максималния брой рекурсии, разрешени за тази заявка. числото е неотрицателно цяло число между 0 и 32767. Когато е посочено 0, не се прилага ограничение. Ако тази опция не е посочена, ограничението по подразбиране за сървъра е 100.

Когато посоченият номер или номер по подразбиране за ограничение MAXRECURSION бъде достигнат по време на изпълнение на заявката, заявката приключва и се връща грешка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:Индексни колони, използвани в like?

  2. Плюсове срещу минуси на внедряването на хибридна облачна среда

  3. Свържете HP-UX Itanium към SQL Server

  4. Как да коригирате „Заявката COMMIT TRANSACTION няма съответна BEGIN TRANSACTION“ в SQL Server

  5. Защо и кога LEFT JOIN с условие в клауза WHERE не е еквивалентно на същото LEFT JOIN в ON?