我正在尝试编写更新查询,以便在用户未在Holliday上输入H代码时填充时间表中的错误字段
查询需要查看时间表中一周的数据,如果没有找到任何条目,或者找不到条目但是没有代码H.在假日日的多个条目都可以,只要其中1个有H代码。如果没有找到H代码,我需要在时间详细信息中为每周时间详细信息中的错误列添加一个Y
周和帐户将是参数
Table Time Sheet Fields account hours code date error
Table Hollidays Fields date
这是我需要发生的事情的样本
样本数据
date,code,account,error
8/1/2012 R 12345 null
8/5/2012 R 12345 null
8/9/2012 H 12345 null
所有这三个记录错误字段都变为否
样本数据
date,code,account,error
8/1/2012 R 12345 null
8/5/2012 R 12345 null
8/9/2012 R 12345 null
所有这三个记录错误字段都变为是
样本数据
date,code,account,error
8/1/2012 R 12345 null
8/5/2012 R 12345 null
8/9/2012 H 12345 null
8/9/2012 R 12345 null
所有这三个记录错误字段都变为否
答案 0 :(得分:1)
我认为这可能是你想要的:
UPDATE ts
set error = 'Y'
FROM timesheet ts
left join holiday h
on ts.tsdate between DateAdd(Day, -7, h.hdate)
and dateadd(d, datediff(d, 0, h.hdate), 0)
WHERE ts.tsdate > DateAdd(Day, -7, getdate())
AND ts.tsdate <= dateadd(d, datediff(d, 0, getdate()), 0)
and h.hdate is not null
编辑,根据您的评论,我认为您想要这个:
UPDATE ts
set error = CASE when h.hdate Is not null then 'H' ELSE 'R' END
FROM timesheet ts
left join holiday h
on ts.tsdate between DATEADD(dd, -(DATEPART(dw, h.hdate)-1), h.hdate)
and DATEADD(dd, 7-(DATEPART(dw, h.hdate)), h.hdate)
WHERE ts.tsdate > DATEADD(dd, -(DATEPART(dw, getdate())-1), getdate())
AND ts.tsdate <= DATEADD(dd, 7-(DATEPART(dw, getdate())), getdate())
第二个版本获取一周的开始/结束(样本是周日至周六),并验证这些日期是否有假期,然后时间表日期也在同一周。如果假日日期不为空,则记录将更新为'H'
,否则该周的记录将获得'R'
。