SQL Server - копировать и изменять данные за год - PullRequest
0 голосов
/ 14 декабря 2018

Нуждается в руководстве здесь.У меня есть набор записей за 2019 год, все 365 дней, с которыми мне нужно сделать некоторые обновления.Вот что мне нужно сделать:

  1. Обновить столбец из другого столбца в таблице.Таким образом, столбец staffing_date = date.
  2. Создайте копию записей в той же таблице.
  3. Обновите столбец с помощью «Day» или «Night».1 день будет иметь две записи - одну для «дня» и одну для «ночи»
  4. Обновите столбец на основе значений из других столбцов, т. Е. Если это «день» и «день недели», то left_num =38. Если это «ночь» и выходные », то номер отпуска = 33.

Примеры данных:

Staffing_date   day_night caldendar_year    date     weekend_ind  month leave_num   
NULL            NULL         2019        2019-01-01   WEEKDAY      1     NULL  
NULL            NULL         2019        2019-01-02   WEEKDAY      1     NULL
NULL            NULL         2019        2019-01-12   WEEKEND      1     NULL

Staffing_date необходимо обновить, указав дату в той жеЯ думаю, что могу понять эту часть, но в остальном я не уверен, что будет лучшим способом сделать это?

Для # 3, я пытаюсь использовать CROSS APPLYкак предложено ниже, но я не думаю, что я использую это правильно.

insert into mytable (day_night)
select days
from mytable
CROSS APPLY (
values('day'), ('night')) v(days)
where calendar_year = '2019'

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Если у вас осталось только 3 и 4, то вы можете легко получить каждое значение в вашей таблице со значениями day и night, используя APPLY и VALUES

FROM YourTable YT
    CROSS APPLY (VALUES('Day'),('Night')) V(Day_Night)

Наконец, чтобы получить логику 33/38, это может сработать в зависимости от вашего языка:

CASE WHEN V.Day_Night = 'Day' AND DATENAME(WEEKDAY,YT.[date]) IN ('Monday','Tuesday','Wednesday','Thursday','Friday') THEN 38 
     WHEN V.Day_Night = 'Night' AND DATENAME(WEEKDAY,YT.[date]) IN ('Saturday','Sunday') THEN 38
END

Обратите внимание, что в вышеприведенном коде нет логики для ночных будней и дневного времени в выходные дни, и т. Д.вернул бы значение NULL.

0 голосов
/ 14 декабря 2018

Если я буду следовать точному порядку, который вы упомянули, это будет:

  1. Обновить столбец из другого столбца в таблице.Обновить MyTable SET MyCol1 = Mycol2

  2. Сделайте копию записей.Внутри того же стола?O вам нужна только резервная копия этой таблицы (SELECT INTO ..), если вы хотите вставить в ту же таблицу, вы должны предоставить нам структуру и PK-NC и все связанные ограничения.

3. Обновите столбец с помощью «Дня» или «Ночи». Какие критерии вы будете использовать для замены Дня или Ночи.

4.Обновите столбец на основе значений из других столбцов, т. Е. Если он«день» и «день недели», то тогда номер_перемещения = 38.

Update MyTable  set
column1 = (case when condition<(column2='Day" And column3="weekday)> then leave_num=38 else column1 end) .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...