Попробуйте это
Используйте IIF
с CASE
SELECT ... ,36. - SUM(CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') THEN IIF(OTH_HRS<=0, 0,OTH_HRS) ELSE 0 END) AS 'Unused Capacity'
ИЛИ
этот Используйте AND
в 1 CASE
утверждении
SELECT ... ,36. - SUM(CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') AND OTH_HRS >= 0 THEN OTH_HRS ELSE 0 END) AS 'Unused Capacity'
Это пример того, как его использовать, во всех случаях никакие отрицательные значения не возвращались.
Убедитесь, что часть 36-SUM
правильна для
DECLARE @Temp as table (PAYCODECATEGORYFK varchar(3), OTH_HRS int)
INSERT INTO @Temp VALUES
('REG', 3),
('REG', -4),
('REG', 0),
('PTO', 8),
('PTO', -2),
('PTO', 0),
('AAA', 9),
('BBB', -1),
('CCC', 0)
SELECT CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') THEN IIF(OTH_HRS<=0, 0,OTH_HRS) ELSE 0 END AS 'Unused Capacity'
FROM @Temp P
SELECT 36. - SUM(CASE WHEN P.PAYCODECATEGORYFK IN ('REG', 'ABU', 'PTO', 'LEAVE', 'HOL') THEN IIF(OTH_HRS<=0, 0,OTH_HRS) ELSE 0 END) AS 'Unused Capacity'
FROM @Temp P