Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

TAMPILKAN SEMUA data Tanggal antara dua tanggal; jika tidak ada baris untuk tanggal tertentu maka tampilkan nol di semua kolom

;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

Anda perlu membuat tanggal, jadi saya menggunakan ekspresi tabel umum rekursif di sini.SQL Fiddle

MAXRECURSION nomor

Menentukan jumlah maksimum rekursi yang diizinkan untuk kueri ini. nomor adalah bilangan bulat nonnegatif antara 0 dan 32767. Ketika 0 ditentukan, tidak ada batas yang diterapkan. Jika opsi ini tidak ditentukan, batas default untuk server adalah 100.

Ketika nomor yang ditentukan atau default untuk batas MAXRECURSION tercapai selama eksekusi kueri, kueri diakhiri dan kesalahan dikembalikan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nilai kolom identitas server SQL dimulai dari 0, bukan 1

  2. cross apply xml query berkinerja lebih buruk secara eksponensial saat dokumen xml tumbuh

  3. Cara menetapkan nilai default untuk kolom yang ada

  4. Bandingkan DATETIME dan DATE dengan mengabaikan porsi waktu

  5. DevOps:DBA atau Pengembang – Mendapatkan Keseimbangan dengan Benar