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

Избиране на всички дати от таблица в рамките на период от време и включване на 1 ред на празна дата

Има няколко начина за справяне с липсващи редове, но всички са свързани с наличието на друг набор от данни, който да комбинирате с текущите си резултати.

Това може да бъде получено от вашите резултати, създадени от CTE или друг процес (като вашия пример), или (мое предпочитание) чрез използване на постоянен шаблон да се присъедините срещу.

Шаблонът във вашия случай може да бъде просто таблица с дати, като вашия @datesTBL. Разликата е, че е създаден предварително с дати, например на стойност 100 години.

Вашата заявка тогава може да е подобна на вашия пример, но бих опитал следното...

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

Това поставя шаблона на календар от ЛЯВО и така улеснява много заявки, тъй като знаете, че полето за дата на календара е винаги попълнено, винаги е стойност само за дата (без част от времето), подредено е, лесно се ГРУПИРА ПО и т.н.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Замяна на NULL с 0 в заявка за SQL сървър

  2. MS SSQL:Как да използвате case when като параметър exec

  3. Използване на генериран от база данни GUID и дата и час с EF4

  4. Изпълнение на SSIS пакет с помощта на dtexec

  5. Намерете всички записи на листови възли, като използвате hierarchyid