Possível solução feita por mim. Utilizando função MONTH, DATENAME, ROUND, CONVERT, YEAR, HAVING
Eu coloquei o nome do mês e o ano em colunas separadas.
SELECT
CLIENTE.NOME, NF.CPF, YEAR(NF.DATA) AS ANO ,DATENAME(MONTH,NF.DATA) MÊS, SUM(INF.QUANTIDADE) AS QUANTIDADE, CLIENTE.[VOLUME DE COMPRA],
CONVERT( VARCHAR, ROUND(((SUM(INF.QUANTIDADE) / [VOLUME DE COMPRA])-1) * 100, 2))+' %' AS [(%) VARIACAO]
,CASE WHEN ( SUM(INF.QUANTIDADE) < [VOLUME DE COMPRA] ) THEN 'VENDA VÁLIDA' ELSE 'VENDA INVÁLIDA' END AS [STATUS DA VENDA]
FROM [NOTAS FISCAIS] NF (NOLOCK)
INNER JOIN [ITENS NOTAS FISCAIS] INF (NOLOCK) ON NF.NUMERO = INF.NUMERO
INNER JOIN (
SELECT TC.NOME, TC.CPF, TC.[VOLUME DE COMPRA]
FROM [TABELA DE CLIENTES] TC (NOLOCK)) CLIENTE ON CLIENTE.CPF = NF.CPF
GROUP BY
MONTH(NF.DATA), CLIENTE.NOME, NF.CPF, YEAR(NF.DATA), DATENAME(MONTH,NF.DATA), CLIENTE.[VOLUME DE COMPRA]
HAVING SUM(INF.QUANTIDADE) > [VOLUME DE COMPRA]
ORDER BY
CLIENTE.NOME, YEAR(NF.DATA), MONTH(NF.DATA)