SQL视图选择最近3个月的工资核算数据

时间:2012-03-09 08:13:40

标签: sql sql-server-2008

我有一个视图,我想用它来生成工资单报告。 我希望它能够选择/获取每月处理数据的最后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)。有什么帮助吗?

1 个答案:

答案 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

或者它是否更复杂。