Заполните строку в SQL Сервер на основе условия (оптимизация запросов) - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь найти всех людей, которые взяли перерыв в предыдущие месяцы, я получил большинство из них. Но если никто не взял перерыв в текущем месяце, мне нужно заполнить строку, в которой говорится 0, чтобы получить правильное изображение.

Вот как выглядят мои данные:

enter image description here

Вот что у меня есть для визуального:

select s.*, DATEPART(MONTH, startd) as timeoff_Mon, 
DATEDIFF(day, startd, endd) as timeoff, getdate() as dat,
DATEPART(MONTH, GETDATE()) as Current_Mon from sample s;

enter image description here

Вы можете видеть, что Джек был Единственный сотрудник, у которого выходной в январе был на один день, а Джон в феврале на 4 дня,

Теперь, в марте, у меня есть текущий месяц, который является последним столбцом на изображении выше от текущей даты. .

Используя этот текущий месяц, есть ли способ заполнить строку или жестко закодировать строку, чтобы заполнить столбец времени отключения как 0 ??

Желаемый результат:

enter image description here

Вот скрипка SQL с вышеупомянутой проблемой. https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=9e8fbb2ae8dcfec9cc5fdfa784782753

1 Ответ

0 голосов
/ 28 марта 2020

Простой вариант - использовать union all для добавления окончательной записи, если в таблице нет строки, которая перекрывает текущий месяц:

select 
    s.*, 
    month(startd) as timeoff_mon, 
    datediff(day, startd, endd) as timeoff, 
    getdate() as dat,
    month(getdate()) as current_mon 
from sample s
union all
select null, null, null, null, null, 0, getdate(), datepart(month, getdate())
where not exists (
    select 1 
    from sample s 
    where 
        s.startd < dateadd(mm, datediff(mm, 0, getdate()) + 1, 0)
        and s.endd >= dateadd(mm, datediff(mm, 0, getdate()), 0)
)

Демонстрация на DB Fiddle :

Name       |   ID | STARTD     | ENDD       | timeoff_mon | timeoff | dat                     | current_mon
:--------- | ---: | :--------- | :--------- | ----------: | ------: | :---------------------- | ----------:
Jack       |    5 | 2020-01-25 | 2020-01-26 |           1 |       1 | 2020-03-28 14:28:56.867 |           3
John       |    6 | 2020-02-05 | 2020-02-09 |           2 |       4 | 2020-03-28 14:28:56.867 |           3
<em>null</em>       | <em>null</em> | <em>null</em>       | <em>null</em>       |        <em>null</em> |       0 | 2020-03-28 14:28:56.867 |           3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...