我試圖弄清楚如何使用 SSRS 的資料驅動訂閱部分在當月的第三個作業日通過電子郵件向一群人發出報告。
我對 SQL 有點陌生,但學得很快,這恰好超出了我的知識范圍。
我確實有一張表,里面有月份、年份、月份、星期幾以及所有這些以不同的日期格式顯示的日期。我只是想不通,但我覺得它在我的理解范圍內。
到目前為止,這就是我所擁有的,我覺得這可以總結成一個不同的更簡單的 sql 陳述句?我猜更優化。
select distinct --(CASE --when day_of_week = (2,3,4,5,6) then dateadd(day,1,day_desc_01) --when day_of_week = (7) then dateadd(day,2,day_desc_01) else day_of_week end) as 'BD_Date' day_of_week , day_desc_01 , date from Company.dbo.Company_Calendar where year = 2023 and day_of_week not in (1,7) and date <> '1900-01-01' and day_weekday_ct = 1 and year = 2023
我只希望它回傳每個月的第三個作業日。然后可能會宣告如果是第 3 個作業日,則啟動報告,如果不是,則不執行任何操作。我希望這有點道理?我也可能在這方面偏離軌道,并在我的頭上。
感謝您的時間和幫助!
uj5u.com熱心網友回復:
這是一個通用示例,但您應該能夠將邏輯應用于您的公司日歷表。
此查詢只會為您提供該月的所有第 3 個作業日。它會過濾掉周末和公共假期(假設您有某種方法可以在表格中記錄公共假期)。應用過濾器后,如果只為每個日歷年/月中的每個記錄分配一個行號,并且僅回傳為 3 的行號。
為了清楚起見,還包括了一些額外的列。
您也許可以簡化這一點,但我沒有;知道您的日歷表包含什么,因此假設它只有日期 ( TheDate) 和要指示的列PublicHoliday。
CREATE VIEW ThirdBusDay AS
SELECT
*
FROM (
SELECT
TheDate
, DayOfWeek = DATEPART(WeekDay, TheDate)
, TheYear = YEAR(TheDate)
, TheMonth = MONTH(TheDate)
, TheDay = DAY(TheDate)
, WorkingDayOfMonth = ROW_NUMBER() OVER(PARTITION BY YEAR(TheDate), MONTH(TheDate) ORDER BY TheDate)
FROM myCalendarTable
WHERE
DATEPART(WeekDay, TheDate) NOT IN (7,1) -- Filter out Saturday and Sunday, change this if system week start is not Sunday.
AND
PublicHoliday = 0 -- filter out public holidays etc..
) d
WHERE WorkingDayOfMonth = 3
因此,如果CAST(GetDate() AS Date)此視圖中存在,那么您知道您必須執行報告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/523907.html
