1
resposta

Usando WHERE com a coluna status_venda

Olá, gostaria de filtrar os resultados obtidos para que só apareçam as linhas que tenham vendas inválidas, porém quanto tento colocar o CASE dentro do WHERE, ele apresenta erro. Também apresenta erro quando tento colocar o alias STATUS_VENDA. Tentei também colocando a condição em si "where (max(VOLUME_DE_COMPRA) - sum(quantidade)) < 0", mas apresenta erro novamente. Poderiam me ajudar? Obrigado.

select x.nome, x.mes_ano, x.quantidade_venda, x.limite_compra, case when (x.limite_compra-x.quantidade_venda) < 0 then 'Inválido' else 'Válido' end as status_venda from (select nf.cpf, c.nome, date_format(data_venda,'%Y-%m') AS MES_ano, sum(quantidade) as quantidade_Venda, max(VOLUME_DE_COMPRA) as limite_compra from itens_notas_fiscais inf inner join notas_fiscais nf on inf.numero = nf.numero inner join tabela_de_clientes c on nf.cpf = c.cpf group by cpf, date_format(data_venda,'%Y-%m')) x

where (max(VOLUME_DE_COMPRA) - sum(quantidade)) < 0

1 resposta

Olá Gustavo, tudo bem?

Você pode obter apenas as vendas inválidas, inserindo logo após a subconsulta, no final uma cláusula WHERE com a mesma condição usado no CASE, dessa forma:

WHERE (X.QUANTIDADE_LIMITE - X.QUANTIDADE_VENDAS) < 0;

Query completa fica dessa forma:

SELECT X.CPF, X.NOME, X.MES_ANO, X.QUANTIDADE_VENDAS, X.QUANTIDADE_LIMITE,
CASE WHEN (X.QUANTIDADE_LIMITE - X.QUANTIDADE_VENDAS) < 0 THEN 'INVÁLIDA'
ELSE 'VÁLIDA' END AS STATUS_VENDA
FROM (
SELECT NF.CPF, TC.NOME, DATE_FORMAT(NF.DATA_VENDA, '%Y-%m') AS MES_ANO
, SUM(INF.QUANTIDADE) AS QUANTIDADE_VENDAS 
, MAX(TC.VOLUME_DE_COMPRA) AS QUANTIDADE_LIMITE FROM NOTAS_FISCAIS NF
INNER JOIN ITENS_NOTAS_FISCAIS INF
ON NF.NUMERO = INF.NUMERO
INNER JOIN TABELA_DE_CLIENTES TC 
ON TC.CPF = NF.CPF
GROUP BY NF.CPF, TC.NOME, DATE_FORMAT(NF.DATA_VENDA, '%Y-%m')) X
WHERE (X.QUANTIDADE_LIMITE - X.QUANTIDADE_VENDAS) < 0;

Espero ter ajudado e bons estudos!