1
resposta

Fiz diferente, teria alguma mudança em relação a processamento, tempo de execução, ou algo do tipo?

SELECT 
    TBC.NOME, 
    SUBSTRING(CONVERT(VARCHAR,NF.[DATA],120),1,7) AS ANO_MES, 
    SUM(INF.QUANTIDADE) AS QUANTIDADE_MES, 
    CASE WHEN SUM(INF.QUANTIDADE) > TBC.[VOLUME DE COMPRA] THEN 'VENDA INVALIDA'
           ELSE 'VENDA VALIDA'
    END AS STATUS_VENDA
FROM [NOTAS FISCAIS] AS NF
    INNER JOIN [ITENS NOTAS FISCAIS] AS INF ON NF.NUMERO = INF.NUMERO
    INNER JOIN [TABELA DE CLIENTES] AS TBC ON NF.CPF = TBC.CPF
GROUP BY TBC.NOME, SUBSTRING(CONVERT(VARCHAR,NF.[DATA],120),1,7), TBC.[VOLUME DE COMPRA]
ORDER BY TBC.NOME, SUBSTRING(CONVERT(VARCHAR,NF.[DATA],120),1,7)
1 resposta

Olá, Francisco tudo bem?

Desde já peço desculpas pela demora em obter retorno.

Analisei a sua consulta e tenho alguns pontos de melhoria.

O objetivo do código é gerar um relatório de vendas válidas. Nosso primeiro passo será descobrir o volume total de vendas para cada cliente dentro de um mês, lembrando que o mês é o fator limitante. Ela será nossa subconsulta. O código referente a essa subconsulta é:

SELECT A.CPF, A.NOME, SUBSTRING(CONVERT(VARCHAR,  B.DATA, 120),1,7) AS MES_ANO, SUM(C.QUANTIDADE) AS QUANTIDADE
FROM [TABELA DE CLIENTES] A
INNER JOIN [NOTAS FISCAIS] B
ON A.CPF = B.CPF
INNER JOIN [ITENS NOTAS FISCAIS] C
ON B.NUMERO = C.NUMERO
GROUP BY A.CPF, A.NOME, SUBSTRING(CONVERT(VARCHAR,  B.DATA, 120),1,7)

Essa consulta agrupa os dados de venda de acordo com o CPF do cliente, nome do cliente e o mês e ano da venda. Para isso, são utilizadas as tabelas [TABELA DE CLIENTES], [NOTAS FISCAIS] e [ITENS NOTAS FISCAIS].

O segundo passo é mais simples: exibir o volume de compra permitido para cada cliente. Encontraremos essa informação na tabela de clientes.

SELECT X.NOME, X.MES_ANO, X.QUANTIDADE,
CASE WHEN Y.[VOLUME DE COMPRA]  < X.QUANTIDADE THEN 'VENDA INVÁLIDA'
WHEN Y.[VOLUME DE COMPRA] >= X.QUANTIDADE  THEN 'VENDA VÁLIDA'
ELSE 'PRODUTO BARATO'.

Note que você fez um SELECT diretamente na tabela [ITENS NOTAS FISCAIS] e não utilizou uma subconsulta. O uso de subconsultas pode ser mais eficiente em alguns casos, especialmente quando há muitos dados a serem agregados.

Em termos de processamento e tempo de execução o seu código é mais simples e pode ser mais eficiente em algumas situações, isso dependerá do tamanho das tabelas e a distribuição dos dados

Francisco, espero ter ajudado.

Caso surja alguma dúvida, fico à disposição.

Abraços e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!