我有一個包含一些用戶ID事件的表(起始表)。
在這個表中有一個Event_Id = 1,指的是一個當地的假日(這不是一個作業日)。
我需要填寫'Event_1'列,以便能夠正確計算作業日(結果表--下面)。
在每一行中,如果Event_Id <> 1,Event_1列應該有 如果相應的用戶在開始日期和結束日期之間與Event_Id = 1相匹配,就應該有1。 StartDate和EndDate,否則應該是0。
如果分析中的行作為Event_id = 1,Event_1列的值
也應該是0。 也應該是0。
我已經有一個計算WorkingDays的函式了。
感謝您的關注。
致謝。 Elio Fernandes
uj5u.com熱心網友回復:
我想出了這個解決方案,但我想知道你是否認為這是最好的方法
。Select T1.*。
大小寫 When t2.StartDate Is not Null and t1. Event_Id = 1 then 0。
When t2.StartDate Is not Null Then 1
Else 0
End As [ Local_Holiday]
從起
[plann].[Events] as T1 left join
(Select StartDate
From [plann].[Events].
Where Event_Id = 1 ) as T2 ON T2.StartDate Between T1.StartDate and T1.EndDate
uj5u.com熱心網友回復:
不,你可以將過濾器移到on子句中,并擺脫子查詢:
Select e1.*,
(Case When e2. StartDate Is not Null and e1. Event_Id = 1 then 0。
When e2.StartDate Is not Null Then 1
Else 0
End) As [Local_Holiday]
From [plann].[Events] e left Join [plann].
[plann].[Events] e2
on e2.Event_Id = 1 and
e2.StartDate Between e1.StartDate and e1.EndDate。
uj5u.com熱心網友回復:
比較你的藍表和綠表的資料結果,Event_1的值似乎是分配給 "當地假日 "的天數。
如果一個 "本地假日 "永遠只等于一天,并且所有的 "本地假日 "記錄都適用于任何假期與假日重合的用戶,那么Gordon的解決方案就可行(而且我喜歡他擺脫了子查詢的方式)。
然而,你可能需要解決其他方面的問題。
根據您的資料結果,每個在度假期間擁有本地假日的用戶都有一個單獨的記錄來表明這一點,這意味著每個用戶的假日記錄的存在是重要的。如果是這樣,請為[User Ud]增加一個連接。
LEFT JOIN plann. 事件 e2 ON e2.Event_Id = 1.
and e2.StartDate BETWEEN e1.StartDate and e1.EndDate
AND e2.[User Ud] = e1.[User Ud]
如果沒有[User Ud]連接,如果用戶22在他的休假時間內有一個假期,那么這個假期是被認可的,但是他的資料結果與其他用戶相比是不一致的,因為他沒有一個Event_Id = 1的記錄分配給他。
通過[User Ud]連接,您可以獲得一致的結果,但這導致了設計問題和限制。
假設 "本地假日 "與所有用戶有關(典型)。如果是這樣,我建議創建一個單獨的假日表。訪問該表的適用日期可確保所有假期都能被所有具有適用假期范圍的用戶所認可。
我修改了腳本,洗掉了假期總是一天的假設(加拿大、英國和其他國家有連續的兩個公共假期)。這一考慮使我回到了使用子查詢。
SELECT。
e1.[User Ud],
e1.Event_Id,
e1.Event,
e1.StartDate,
e1.EndDate。
CASE[/span
WHEN e1.Event_Id =1
THEN 0
WHEN e2.[User Ud] IS NOT NULL
THEN Number_Days
ELSE 0
END AS Holiday_Nmbr_Days,
作業日
FROM plann.Events e1
LEFT JOINSELECT)
[User Ud],
DATEDIFF(dd,StartDate,EndDate) 1 AS Number_Days。
開始日期
FROM plann.Events
WHERE Event_Id = 1) AS e2 ON e2.Startdate BETWEEN e1.Startdate AND e1.EndDate
AND e2.[User Ud] = e1.[User Ud] /* Exclude if not applicable*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/314842.html
標籤:
下一篇:用PHP將CSV檔案決議成列


