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

Wybranie wszystkich dat z tabeli w zakresie dat i uwzględnienie 1 wiersza na pustą datę

Istnieje kilka sposobów radzenia sobie z brakującymi wierszami, ale wszystkie dotyczą posiadania innego zestawu danych, który można połączyć z bieżącymi wynikami.

Może to wynikać z Twoich wyników, utworzonych przez CTE lub inny proces (np. Twój przykład) lub (moje preferencje) za pomocą stałego szablonu do przyłączenia się.

Szablon w twoim przypadku może być po prostu tabelą dat, taką jak twój @datesTBL. Różnica polega na tym, że jest tworzony z wyprzedzeniem, na przykład ze 100-letnimi datami.

Twoje zapytanie może być wtedy podobne do twojego przykładu, ale spróbowałbym następujących...

SELECT 
    dt.tempDate ,
    InstructorID,           EventStart, 
    EventEnd,               cancelled, 
    cancelledInstructor, 
    EventType,              DevName, 
    Room,                   SimLocation, 
    ClassLocation,          Event, 
    Duration,               TrainingDesc, 
    Crew,                   Notes, 
    LastAmended,            InstLastAmended, 
    ChangeAcknowledged,     Type, 
    OtherType,              OtherTypeDesc, 
    CourseType 
FROM 
  @datesTBL dt 
LEFT OUTER JOIN
  OpsInstructorEventsView iv
    ON  iv.EventStart >= dt.tempDate
    AND iv.EventStart <  dt.tempDate + 1
    AND iv.InstructorID = @InstructorID 
WHERE
      dt.tempDate >= @StartDate
  AND dt.tempDate <= @EndDate
ORDER BY
  dt.tempDate,
  iv.EventStart

Spowoduje to umieszczenie szablonu kalendarza po LEWEJ, dzięki czemu wiele zapytań jest łatwiejszych, ponieważ wiesz, że pole daty w kalendarzu jest zawsze wypełnione, zawsze zawiera tylko datę (bez części czasowej), jest w porządku, można je łatwo GRUPOWAĆ WEDŁUG itp.



  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 v.Next:Wydajność STRING_AGG, część 2

  2. XML jako parametr w procedurze składowanej (serwer sql)

  3. Używanie SqlDependency z nazwanymi kolejkami

  4. Jak utworzyć tabelę w SQL Server za pomocą zapytania

  5. Wartość kolumny tożsamości nagle skacze do 1001 na serwerze sql