Вот запрос SQL, который работает абсолютно нормально:
DECLARE @IncludePTO AS CHAR
SET @IncludePTO = 'Y'
SELECT
HQCO.HQCo, HQCO.Name, PREH.PRDept, PREH.Craft, HRRM.PositionCode, PRTH.Employee,
PREH.LastName, PREH.FirstName, SUM(PRTH.Hours) AS Hrs
FROM PREH
INNER JOIN HRRM ON PREH.PRCo = HRRM.HRCo AND PREH.Employee = HRRM.HRRef
INNER JOIN PRTH ON PREH.PRCo = PRTH.PRCo AND PREH.Employee = PRTH.Employee
INNER JOIN HQCO ON PRTH.PRCo = HQCO.HQCo
WHERE
(dbo.PRTH.PREndDate BETWEEN '1/1/2012 00:00:00' AND '1/1/2013 00:00:00')
AND (PRGroup = 2)
AND dbo.PRTH.EarnCode IN (1,3,8)
GROUP BY
HQCO.HQCo, HQCO.Name, PREH.PRDept, PREH.Craft,
HRRM.PositionCode, PRTH.Employee, PREH.LastName, PREH.FirstName
Но я пытаюсь использовать предикат IN в сочетании с CASE WHEN в предложении WHERE. Посмотрите на модифицированный запрос ниже:
DECLARE @IncludePTO AS CHAR
SET @IncludePTO = 'Y'
SELECT
HQCO.HQCo, HQCO.Name, PREH.PRDept, PREH.Craft, HRRM.PositionCode, PRTH.Employee,
PREH.LastName, PREH.FirstName, SUM(PRTH.Hours) AS Hrs
FROM PREH
INNER JOIN HRRM ON PREH.PRCo = HRRM.HRCo AND PREH.Employee = HRRM.HRRef
INNER JOIN PRTH ON PREH.PRCo = PRTH.PRCo AND PREH.Employee = PRTH.Employee
INNER JOIN HQCO ON PRTH.PRCo = HQCO.HQCo
WHERE
(dbo.PRTH.PREndDate BETWEEN '1/1/2012 00:00:00' AND '1/1/2013 00:00:00')
AND (PRTH.PRGroup = 2)
AND
CASE WHEN @IncludePTO = 'Y' THEN dbo.PRTH.EarnCode IN (1,2,3,8,100,110,120,115)
ELSE dbo.PRTH.EarnCode IN (1,2,3,8)
END
GROUP BY
HQCO.HQCo, HQCO.Name, PREH.PRDept, PREH.Craft, HRRM.PositionCode, PRTH.Employee,
PREH.LastName, PREH.FirstName
Кажется, это не работает и продолжает выдавать мне синтаксическую ошибку:
Сообщение 156, уровень 15, состояние 1, строка 15
Неверный синтаксис рядом с ключевым словом "IN".
Любая помощь или руководство, чтобы указать, что мне не хватает? Я был бы очень признателен за любую помощь/советы. Большое спасибо,
Пранав