乾杯傢伙S,
我結束了添加源數據生成的兩個額外的「列」,我可以在報告中使用的參數,例如假設用戶選擇Start Date =「May 2008」End Date =「Feb 2009」。查詢中真正需要的是2008-05-01 00:00:01到2009-02-28 23:59:59的開始日期,這將在飛行中使用用戶友好日期:
Select DISTINCT
'YearMonth' =
CASE
WHEN MONTH(dtwhen) = 01 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Jan'
WHEN MONTH(dtwhen) = 02 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Feb'
WHEN MONTH(dtwhen) = 03 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Mar'
WHEN MONTH(dtwhen) = 04 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Apr'
WHEN MONTH(dtwhen) = 05 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' May'
WHEN MONTH(dtwhen) = 06 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Jun'
WHEN MONTH(dtwhen) = 07 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Jul'
WHEN MONTH(dtwhen) = 08 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Aug'
WHEN MONTH(dtwhen) = 09 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Sep'
WHEN MONTH(dtwhen) = 10 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Oct'
WHEN MONTH(dtwhen) = 11 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Nov'
WHEN MONTH(dtwhen) = 12 THEN LEFT(CONVERT(varchar, dtwhen, 20),4)+' Dec'
ELSE LEFT(CONVERT(varchar, dtwhen, 20),4)+'Jan' -- DPT
END,
CAST(CAST(YEAR(dtwhen) AS varchar) + '-' + CAST(MONTH(dtwhen) AS varchar) + '-01 00:00:01' AS DateTime) AS MonthBegin,
--Add a date column storing the exact date at the end of the selected month
-- E.g. Jan 2004 becomes Jan 29th 23:59:59
-- It basically adds 1 month to the exact beginning of next month, then rolls back 2 seconds..
DATEADD(SECOND,-2,DATEADD(MONTH,1,CAST(CAST(YEAR(dtwhen) AS varchar) + '-' + CAST(MONTH(dtwhen) AS varchar) + '-01 00:00:01' AS DateTime))) AS MonthEnd
FROM Feedback
ORDER BY MonthBegin DESC
關鍵點要注意的是在SSRS可以顯示varchar字段的用戶(「2005年5月」),並在查詢中使用的其他計算,潛在的日期時間值(2005-05-01 00:00:01)。