Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL QUERY pokazujące między datami jako konkretne daty + dane należące do każdej daty!

Zwykle sugerowałbym posiadanie statycznej tabeli kalendarza, która zawiera sekwencyjną listę dat. Jednak używając sprytnego podejścia Cade Roux do generowania tabeli kalendarza, otrzymasz coś takiego:

;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); 

Teraz, jeśli chcesz filtrować według kraju w taki sposób, że zwracane są tylko te dni dla danego kraju, w których są dane, wystarczy zmienić sprzężenie lewe na sprzężenie wewnętrzne.

DODAT

Na podstawie komentarzy poproszono o pokazanie wszystkim krajom, czy mają wniosek, czy nie. Aby to zrobić, musisz połączyć się krzyżowo z tabelą Kraje:

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. Wykonywanie przygotowanych instrukcji generowanych przez NHibernate w SQL Server Management Studio

  2. Jak utworzyć domyślną inną kolumnę zależną od ograniczeń w serwerze sql?

  3. Wyszukaj dane w bazie danych

  4. Pobieranie ParsingError, InvalidSoapActionHeader na żądanie SQL Server SOAP

  5. SQL Server 2008:Mam 1000 tabel, muszę wiedzieć, które tabele zawierają dane