2012-08-09 51 views
0

我想寫一個更新查詢來填充錯誤字段中的時間片表時,用戶沒有在霍利迪更新查詢只有當項目存在

的進入H的代碼更新霍利迪進入查詢需要查看時間表中的一週數據,並且如果沒有發現霍利迪的條目或者如果找到條目但沒有H的代碼。只要其中一個具有霍利德日的多個條目就可以一個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 

所有3這些記錄錯誤域的轉向沒有

樣本數據

date,code,account,error 
8/1/2012 R 12345 null 
8/5/2012 R 12345 null 
8/9/2012 R 12345 null 

所有3這些記錄錯誤域的轉向是

樣本數據

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 

所有3這些記錄錯誤域的轉向沒有

回答

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 

SQL Fiddle with Demo

編輯,根據您的意見,我想你想的:

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()) 

SQL Fiddle with Demo

這第二個版本得到一週的開始/結束(樣品爲王孫星期六),並驗證這些日期是否有假期,然後時間表日期也在同一周。如果節假日不爲空,則記錄將更新爲'H',否則該周的記錄將獲得'R'

+0

這就是我在做什麼 更新時間表 – user1345246 2012-08-10 00:12:11

+0

@ user1345246請編輯你的OP與你試過的。這似乎是在我提供的小提琴上工作。 – Taryn 2012-08-10 00:13:24

+0

代碼字段應設置爲H或R.由於您輸入的holliday在8/9,並且當天沒有條目,所有其他記錄都應設置爲錯誤 – user1345246 2012-08-10 00:23:04

相關問題