2015-09-23 58 views
-2

所以我有一個查詢,用2周的日期更新現有的表。不過,我在這裏遇到了一個問題。然而,我將日期更新到表中,我希望能夠跳過結束日期之前的週末。這裏是我的查詢和表格。正如我們在下面看到的,我試圖在where子句中加入,但結果仍然讓我在兩週之間的中間週末。我該如何解決這個問題。 這裏是sqlfiddle:http://sqlfiddle.com/#!3/35365/1 after update帶有增量日期的更新表

enter image description here

+0

業務邏輯不混入數據訪問邏輯..在你的程序代碼,而不是數據庫進行更新。數據庫用於存儲/檢索/查詢數據。 – mergenchik

+0

下次嘗試提供 [** SqlFiddle **](http://sqlfiddle.com/#!15/5368b/6),以便我們可以更好地理解問題並以更快的速度給出答案 。我們不能從照片上覆制/粘貼:( –

+0

也標記你的照片,我猜最後一張照片是** SOURCE **數據,第一張照片是** RESULT **數據?但是你是什麼** DESIRE OUTPUT ** ? –

回答

1

假設你正在試圖用日期給定的範圍,以更新項目名錶只有平日的一天,你應該先確定您的日期範圍內的工作日然後相應地更新。

首先CTE(DateRange)生成給定範圍之間的所有日期。

第二個CTE(星期幾)刪除週末並分配行號。

三CTE(項目)分配行號以項目名錶中的記錄,以便匹配那些平日

,最後做了更新。

Declare @WeekEnding datetime 
declare @Startdate datetime 
set @WeekEnding = '2015-09-26' 
set @Startdate = '2015-09-14' 

;With DateRange AS (
    Select @StartDate NewDate, DATEPART(WEEKDAY, @StartDate) DayOfTheWeek 
    Union All 
    Select DATEADD(DAY, 1, NewDate), DATEPART(WEEKDAY, DATEADD(DAY, 1, NewDate)) From DateRange Where NewDate < @WeekEnding 
), WeekDays AS (
    Select ROW_NUMBER() OVER(ORDER BY NewDate) RowNumber, NewDate, DayOfTheWeek 
    From DateRange Where DayOfTheWeek NOT IN (1, 7) 
), Projects AS (
    Select ROW_NUMBER() OVER(ORDER BY PkId) RowNumber, PkId From ProjectName 
) Update ProjectName 
Set Day = WeekDays.NewDate 
From ProjectName 
Join Projects ON Projects.PkId = ProjectName.PkId 
Join WeekDays ON WeekDays.RowNumber = Projects.RowNumber 

注意:如果要過濾要在ProjectName上更新的記錄,則應在項目中應用過濾器。

http://sqlfiddle.com/#!3/35365/13

+0

sqlfiddle不工作 – Chandru

+0

@Chandru怎麼了?我只是點擊鏈接,並能成功運行腳本。 – Engin

+0

它現在正在工作。 – Chandru