Oi, Victor! Tudo certo por aí?
Peço desculpas pela demora em retornar.
Para calcular corretamente o percentual, precisaremo seguir algumas etapas:
Localizar a view vw_filtro_vendas
;
Clicar com o botão direito do mouse sobre ela e escolher a opção "Alter View";
Remover A.NUMERO
dos campos presentes no SELECT
, pois ele não é necessário;
Usar a função MAX
para pegar o limite de compra (dessa forma, estaremos levando em consideração o valor máximo possível para o volume das compras):
MAX(C.VOLUME_DE_COMPRA) AS LIMITE,
Também utilizar a função MAX
para o cálculo da diferença:
MAX(C.VOLUME_DE_COMPRA) - SUM(B.QUANTIDADE) AS DIFERENCA
Utilizar a seguinte expressão para o percentual:
(1-(MAX(C.VOLUME_DE_COMPRA)/SUM(B.QUANTIDADE))) * 100 AS PERCENTUAL
Observe que, além de usar a função MAX
sobre C.VOLUME_DA_COMPRA
, foi trocado o sinal de subtração por um de divisão, permitindo o cálculo do percentual (que depende de uma razão entre dois valores).
No CASE
, também usar a função MAX
para C.VOLUME_DE_COMPRA
:
CASE WHEN (MAX(C.VOLUME_DE_COMPRA) - SUM(B.QUANTIDADE)) < 0 THEN 'INVÁLIDO'
ELSE 'VÁLIDO' END AS STATUS_VENDA
Mudar a cláusula WHERE
por ON
, uma vez que estamos realizando um INNER JOIN
;
INNER JOIN tabela_de_clientes AS C
ON A.CPF = C.CPF
Depois de todos esses passos, teremos como resultado o seguinte SELECT
para construção da view:
SELECT date_format(A.DATA_VENDA, '%Y - %m') AS ANO_MES,
A.CPF, C.NOME,
SUM(B.QUANTIDADE) AS QUANTIDADE_VENDAS,
MAX(C.VOLUME_DE_COMPRA) AS LIMITE,
(1-(MAX(C.VOLUME_DE_COMPRA)/SUM(B.QUANTIDADE))) * 100 AS PERCENTUAL,
CASE WHEN (MAX(C.VOLUME_DE_COMPRA) - SUM(B.QUANTIDADE)) < 0 THEN 'INVÁLIDO'
ELSE 'VÁLIDO' END AS STATUS_VENDA
FROM notas_fiscais AS A
INNER JOIN itens_notas_fiscais AS B
ON A.NUMERO = B.NUMERO
INNER JOIN tabela_de_clientes AS C
ON A.CPF = C.CPF
GROUP BY date_format(A.DATA_VENDA, '%Y - %m'), A.CPF
Feito isso, você já pode salvar as alterações feitas em vw_filtro_vendas
e então executá-la novamente:
SELECT * FROM vw_filtro_vendas WHERE STATUS_VENDA = 'INVÁLIDO';
Pronto! Assim conseguiremos visualizar todas as vendas inválidas! Victor, espero ter ajudado! Fico à disposição em caso de dúvidas,
Um forte abraço.
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!