1
resposta

para quem fez usando apenas o join

quem fez o exercício usando apenas o inner join sem utilizar as subquerys não consegue utilizar o WHERE SUM(INF.[QUANTIDADE]) > C.[VOLUME DE COMPRA], aparece o seguinte erro:

"Uma agregação não pode aparecer na cláusula WHERE, a menos que esteja em uma subconsulta contida em uma cláusula HAVING ou uma lista de seleção, e a coluna que está sendo agregada seja uma referência externa."

mas é possível utilizando o HAVING após o GROUP BY

SELECT C.NOME, SUBSTRING(CONVERT(VARCHAR, NF.[DATA], 120), 1, 7) AS ANO_MES, SUM(INF.[QUANTIDADE]) AS QUANTIDADE_MES, C.[VOLUME DE COMPRA] AS QNT_AUTORIZADA,
CONVERT(DECIMAL(15,2), (1 - (C.[VOLUME DE COMPRA]/SUM(INF.[QUANTIDADE]))) * 100) AS VARIACAO,
CASE WHEN SUM(INF.[QUANTIDADE]) <= C.[VOLUME DE COMPRA] THEN 'AUTORIZADO'
    WHEN SUM(INF.[QUANTIDADE]) > C.[VOLUME DE COMPRA] THEN 'INVÁLIDO'
    END AS STATUS_VENDA
FROM [ITENS NOTAS FISCAIS] INF
INNER JOIN [NOTAS FISCAIS] NF ON NF.NUMERO = INF.NUMERO
INNER JOIN [TABELA DE CLIENTES] C ON C.CPF = NF.CPF
--WHERE SUM(INF.[QUANTIDADE]) > C.[VOLUME DE COMPRA]
GROUP BY C.NOME, SUBSTRING(CONVERT(VARCHAR, NF.[DATA], 120), 1, 7), C.[VOLUME DE COMPRA]
HAVING SUM(INF.[QUANTIDADE]) > C.[VOLUME DE COMPRA]
ORDER BY C.NOME, SUBSTRING(CONVERT(VARCHAR, NF.[DATA], 120), 1, 7)
1 resposta

Olá Isabel, tudo bem?

Muito legal Isabel você ter compartilhado aqui com a gente essa dica, poderá ajudar outros alunos. Foi bem legal também, você ter compartilhado aqui com a gente a sua query, você está indo muito bem Isabel :).

Continue assim e bons estudos!