¿No te estás complicando demasiado? La solución indicando el rango inicial y final de la fecha era excelente, sólo no me convence el uso de una función para obtener la fecha.
¿Que tal si no usas las funciones?
Código:
DECLARE @trimestre INT, @anio CHAR(4), @cliente INT
DECLARE @dateini DATETIME, @dateend DATETIME
SET @trimestre = 4
SET @anio ='2007'
SET @dateini = CASE @trimestre
WHEN 1 THEN @anio +'0101'
WHEN 2 THEN @anio +'0401'
WHEN 3 THEN @anio +'0701'
WHEN 4 THEN @anio +'1001'
END
SET @dateend =dateadd(m, 3, @dateini)
SET @cliente = 4724
SELECT DATENAME(M, @anio + RIGHT('0'+CAST(MONTH(periodo) AS VARCHAR(2)), 2) + '01') AS Fecha,
SUM(ISNULL(litros, 0)) AS Cantidad
FROM ALBARANES_C
WHERE cliente = @cliente
AND fecha >= @dateini
AND fecha < @dateend
GROUP BY MONTH(fecha)
ORDER BY MONTH(fecha)