1
resposta

Desafio: complementando o relatório

SELECT
    TC.CPF,
    TC.NOME,
    TC.VOLUME_DE_COMPRA,
    TV.MES_ANO,
    TV.QUANTIDADE_TOTAL,
    (CASE 
        WHEN TC.VOLUME_DE_COMPRA >= TV.QUANTIDADE_TOTAL 
        THEN 'VENDAS VÁLIDAS'
        ELSE 'VENDAS INVÁLIDAS' 
    END) AS RESULTADO,
    ROUND((1 - (TC.VOLUME_DE_COMPRA/TV.QUANTIDADE_TOTAL)) * 100,2) AS DIFERENCA

FROM TABELA_DE_CLIENTES TC
INNER JOIN 
(
SELECT
    NF.CPF,
    CONVERT(VARCHAR(7),NF.DATA_VENDA,120) AS MES_ANO,
    SUM(INF.QUANTIDADE) AS QUANTIDADE_TOTAL
FROM NOTAS_FISCAIS NF
INNER JOIN ITENS_NOTAS_FISCAIS INF
ON NF.NUMERO = INF.NUMERO
GROUP BY NF.CPF,CONVERT(VARCHAR(7),NF.DATA_VENDA,120)
) AS TV
ON TV.CPF=TC.CPF
WHERE TC.VOLUME_DE_COMPRA<TV.QUANTIDADE_TOTAL
1 resposta

Oi, Álvaro! Tudo bem?

Seu raciocínio está certinho!

Só há uma breve alteração que precisamos fazer: o que a cláusula WHERE está recebendo. No exercício antigo, pegamos os resultados que foram do mês de janeiro de 2015, e vamos continuar a nos basear nele para retornarmos nossa consulta, portanto, vamos colocar WHERE TV.MES_ANO = '2015-01'.

Não basta apenas colocar isso no WHERE, pois queremos apenas os que tiveram o limite estourado. Para termos esse retorno, vamos adicionar AND (TC.VOLUME_DE_COMPRA - TV.QUANTIDADE_TOTAL) < 0; após o filtro anterior.

Portanto, o que queremos adicionar no final é este bloco de código:

WHERE TV.MES_ANO = '2015-01'
AND (TC.VOLUME_DE_COMPRA - TV.QUANTIDADE_TOTAL) < 0;

E sua consulta estará completa! =)

Se alguma dúvida surgir, estamos à disposição.

Abraços e bons estudos!