我有一个视图,我想用它来生成工资单报告。 我希望它能够选择/获取每月处理数据的最后3个月。 例如。如果今天是2012年5月15日并且5月的工资单尚未完成,我想仅在4月,3月和2月得到结果。
我的查询:
SELECT dbo.[@EIM_PROCESS_DATA].U_Tax_year, dbo.[@EIM_PROCESS_DATA].U_Employee_ID, SUM(dbo.[@EIM_PROCESS_DATA].U_Amount) AS PAYE,
dbo.OADM.CompnyName, dbo.OADM.CompnyAddr, dbo.OADM.TaxIdNum, dbo.OHEM.lastName + ', ' + ISNULL(dbo.OHEM.middleName, '')
+ ' ' + ISNULL(dbo.OHEM.firstName, '') AS EmployeeName, dbo.OHEM.govID, dbo.[@EIM_PROCESS_DATA].U_Process_month
FROM dbo.[@EIM_PROCESS_DATA] INNER JOIN
dbo.OHEM ON dbo.[@EIM_PROCESS_DATA].U_Employee_ID = dbo.OHEM.empID CROSS JOIN
dbo.OADM
WHERE (dbo.[@EIM_PROCESS_DATA].U_PD_code = 'SYS033')
GROUP BY dbo.[@EIM_PROCESS_DATA].U_Tax_year, dbo.[@EIM_PROCESS_DATA].U_Employee_ID, dbo.OADM.CompnyName, dbo.OADM.CompnyAddr, dbo.OADM.TaxIdNum,
dbo.OHEM.lastName, dbo.OHEM.firstName, dbo.OHEM.middleName, dbo.OHEM.govID, dbo.[@EIM_PROCESS_DATA].U_Process_month
字段U_Process_Month存储一年中的月份名称(varchar)。有什么帮助吗?
答案 0 :(得分:2)
如果您想将月份名称转换为日期时间,则可以选择以下选项:
declare @Month varchar(10) = 'DEC'
declare @Year varchar(4) = '2012'
SELECT CAST(@Month ' ' + @Year AS DATETIME) AS KeyDate
将@Month和@Year变量替换为您的字段名称,然后您迈出第一步; - )
要仅选择过去三个月,请尝试HAVING
子句以及指示上次处理月份的变量@MaxKeydate
:
SELECT (...) FROM bla
HAVING KeyDate > DATEADD(month, -3, @MaxKeyDate)
如果您可以使用简单的
确定@MaxKeyDate
的值,则需要了解自己
SELECT MAX(CAST(@Month ' ' + @Year AS DATETIME)) FROM bla
或者它是否更复杂。