这里需要指南。 我有一套2019年的记录,整个365天都需要进行一些更新。我需要做的事情是:
数据示例:
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'
答案 0 :(得分:1)
如果我按照您提到的确切顺序,那就是:
从表中的另一列更新一列。 更新MyTable SET MyCol1 = Mycol2
复制记录。 在同一张桌子里面? O,您只需要此表的备份(SELECT INTO ..),如果要插入同一表中,则应向我们提供结构和PK-NC以及与之相关的所有限制。
3。使用“ Day”或“ Night”更新一列 您将使用什么标准替换白天或黑夜。
4。根据其他列的值更新列,即是否为“天” 然后是“工作日”,则Leave_num = 38。
Update MyTable set
column1 = (case when condition<(column2='Day" And column3="weekday)> then leave_num=38 else column1 end) .....
答案 1 :(得分:1)
如果只剩下3和4,则可以使用day
和{{1}轻松获得表中具有值night
和APPLY
的每个值}
VALUES
最后,要获得您的33/38逻辑,这可能取决于您的语言:
FROM YourTable YT
CROSS APPLY (VALUES('Day'),('Night')) V(Day_Night)
请注意,上面的代码对于夜晚的工作日和周末的白天时间没有逻辑,因此将返回值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
。