Представление SQL для выбора последних 3 месяцев данных о заработной плате - PullRequest
1 голос
/ 09 марта 2012

У меня есть представление, которое я хочу использовать для создания отчета о заработной плате.Я хочу, чтобы он выбирал / получал последние 3 месяца ежемесячно обработанных данных.Например, если сегодня 15 мая 2012 г., а начисление заработной платы за май не выполнено, я хочу получить результаты только за апрель, март и февраль.

Мой запрос:

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 Ответ

2 голосов
/ 09 марта 2012

Вот один вариант, если вы хотите превратить название месяца в datetime:

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

или если оно более сложное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...