Проблема может возникнуть из-за того, что для периода задано декабрь 201612, а если вы добавите его, оно станет 201613 вместо 201701. Это проблема использования целых чисел для значений даты. Как уже упоминал Шон, это также можно преобразовать в более простой запрос.
CREATE PROCEDURE promediosDot
@periodo1a int,
@periodo1b int,
@periodo2a int,
@periodo2b int,
@periodo3a int,
@periodo3b int,
@tipGas nvarchar(6)
AS
SELECT
U.HOMOLOG_VP,
PROMEDIO1 = ( COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 0, CAST( @periodo1a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 1, CAST( @periodo1a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 2, CAST( @periodo1a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 3, CAST( @periodo1a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)) /4,
PROMEDIO2 = ( COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 0, CAST( @periodo2a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 1, CAST( @periodo2a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 2, CAST( @periodo2a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 3, CAST( @periodo2a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)) /4,
PROMEDIO3 = ( COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 0, CAST( @periodo3a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 1, CAST( @periodo3a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 2, CAST( @periodo3a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)
+ COUNT(DISTINCT CASE WHEN D.PERPRO = CONVERT( CHAR(6), DATEADD( MM, 3, CAST( @periodo3a AS VARCHAR(8)) + '01'), 112) THEN D.ID_HR END)) /4
FROM USOS_CP U
JOIN DOTACION D ON U.HOMOLOG_VP = D.HOMOLOG_VP
WHERE U.PER_PRO > 201611
AND (D.PERPRO BETWEEN @periodo1a AND @periodo1a + 3
OR D.PERPRO BETWEEN @periodo2a AND @periodo2a + 3
OR D.PERPRO BETWEEN @periodo3a AND @periodo3a + 3)
GROUP BY U.HOMOLOG_VP
ORDER BY HOMOLOG_VP;