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

SQL QUERY menampilkan Antara Tanggal sebagai tanggal tertentu + Data milik setiap tanggal!

Biasanya, saya sarankan memiliki tabel kalender statis yang berisi daftar tanggal berurutan. Namun, menggunakan pendekatan cerdas Cade Roux untuk membuat tabel kalender, Anda akan memiliki sesuatu seperti:

;With Calendar As
    (
     Select Cast(Floor(Cast(@StartDate As float)) As datetime) As [Date]
     Union All
     Select DateAdd(d, 1, [Date])
     From Calendar
     Where DateAdd(d, 1, [Date]) < @EndDate
    )
Select C.[Date], R.Country, Sum(R.PeopleNeeded)
From Calendar As C
    Left Join Requests As R
        On C.[Date] Between R.[Start Date] And R.[End Date]
            And ( @Country Is Null Or R.Country = @Country )
Group By C.[Date], R.Country    
Option (MAXRECURSION 0); 

Sekarang, jika Anda ingin memfilter negara sehingga satu-satunya hari yang dikembalikan adalah hari-hari untuk negara tertentu yang memiliki data, maka Anda hanya perlu mengubah Gabung Kiri menjadi Gabung Dalam.

TAMBAHAN

Dari komentar, diminta untuk menunjukkan semua negara apakah mereka memiliki Permintaan atau tidak. Untuk melakukannya, Anda perlu melakukan cross join ke tabel Negara:

With Calendar As
    (
     Select Cast(Floor(Cast(@StartDate As float)) As datetime) As [Date]
     Union All
     Select DateAdd(d, 1, [Date])
     From Calendar
     Where DateAdd(d, 1, [Date]) < @EndDate
    )
Select C.[Date], C2.Country, Sum(R.PeopleNeeded)
From Calendar As C
    Cross Join Countries As C2
    Left Join Requests As R
        On C.[Date] Between R.[Start Date] And R.[End Date]
            And R.CountryId = C2.CountryId
Group By C.[Date], C2.Country    
Option (MAXRECURSION 0); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Metode yang disarankan untuk mengimpor file .csv ke Microsoft SQL Server 2008 R2?

  2. Utilitas Pengubah Kata Sandi SQL yang Cerdik untuk Mengatur Ulang Kata Sandi SQL

  3. Ekstrak Nomor Minggu dari Tanggal di SQL Server (T-SQL)

  4. Temukan baris terakhir dalam grup berdasarkan kueri-SQL Server

  5. Aplikasi tidak dapat membuka koneksi SQL saat di IIS