Oi, Vitor! Tudo bem?
Desde já, peço desculpas pela demora em retornar.
Mandou bem na construção deste SELECT
!
Para deixá-lo ainda mais completo, podemos adicionar uma nova coluna que classifica a venda como válida ou inválida. Para isso, iremos transformar a sua consulta em uma subconsulta, englobando-a por parênteses e adicionando um "apelido" para ela após o fechamento dos parênteses:
(
SELECT date_format(A.DATA_VENDA, '%Y - %m') AS ANO_MES,
A.NUMERO, A.CPF, C.NOME,
SUM(B.QUANTIDADE) AS QUANTIDADE_VENDAS,
C.VOLUME_DE_COMPRA AS LIMITE
FROM notas_fiscais AS A
INNER JOIN itens_notas_fiscais AS B
ON A.NUMERO = B.NUMERO
INNER JOIN tabela_de_clientes AS C
WHERE A.CPF = C.CPF
GROUP BY date_format(A.DATA_VENDA, '%Y - %m'), A.CPF
) X;
Observe que o apelido dado foi somente a letra "X" em maiúsculo!
Feito isso, iniciaremos um novo SELECT
que irá utilizar os seguintes campos: CPF
, ANO_MES
, QUANTIDADE_VENDAS
e LIMITE
. Como ele irá buscar os dados da nossa subconsulta, precisamos passar a letra "X" antes de escrever cada campo, chegando no seguinte resultado:
SELECT X.CPF, X.NOME, X.ANO_MES, X.QUANTIDADE_VENDAS, X.LIMITE,
FROM (
SELECT date_format(A.DATA_VENDA, '%Y - %m') AS ANO_MES,
A.NUMERO, A.CPF, C.NOME,
SUM(B.QUANTIDADE) AS QUANTIDADE_VENDAS,
C.VOLUME_DE_COMPRA AS LIMITE
FROM notas_fiscais AS A
INNER JOIN itens_notas_fiscais AS B
ON A.NUMERO = B.NUMERO
INNER JOIN tabela_de_clientes AS C
WHERE A.CPF = C.CPF
GROUP BY date_format(A.DATA_VENDA, '%Y - %m'), A.CPF
) X;
Por fim, para definir quais vendas foram válidas ou inválidas, usaremos a estrutura CASE
, a qual permite trabalhar com condições, dentro do primeiro SELECT
:
CASE
WHEN (X.LIMITE - X.QUANTIDADE_VENDAS) < 0 THEN 'INVÁLIDA'
ELSE 'VÁLIDA'
END AS STATUS_VENDA
O CASE
é composto por abertura e fechamento. Em sua abertura, utilizamos apenas a cláusula CASE
, em seu fechamento, a cláusula END
seguida de um AS
e de um apelido para a nova coluna que será criada a partir de tal CASE
(neste caso, a coluna chama-se STATUS_VENDA
).
Dentro dele, foi utilizada a cláusula WHEN
(que significa "quando" em português). Ela irá verificar se a subtração entre X.LIMITE
e X.QUANTIDADE_VENDAS
é menor que zero. Se isso for verdade, a cláusula THEN
(em português, "então"), passará como valor do campo STATUS_VENDA
a palavra "INVÁLIDA". Por fim, foi usado o ELSE
, oferece uma solução caso a condição anterior não seja cumprida — neste cenário, caso a subtração não seja inferior a 0, então STATUS_VENDA
terá o valor "VÁLIDA".
Depois dessas alterações, chegamos na seguinte consulta:
SELECT X.CPF, X.NOME, X.ANO_MES, X.QUANTIDADE_VENDAS, X.LIMITE,
CASE
WHEN (X.LIMITE - X.QUANTIDADE_VENDAS) < 0 THEN 'INVÁLIDA'
ELSE 'VÁLIDA'
END AS STATUS_VENDA
FROM (
SELECT date_format(A.DATA_VENDA, '%Y - %m') AS ANO_MES,
A.NUMERO, A.CPF, C.NOME,
SUM(B.QUANTIDADE) AS QUANTIDADE_VENDAS,
C.VOLUME_DE_COMPRA AS LIMITE
FROM notas_fiscais AS A
INNER JOIN itens_notas_fiscais AS B
ON A.NUMERO = B.NUMERO
INNER JOIN tabela_de_clientes AS C
WHERE A.CPF = C.CPF
GROUP BY date_format(A.DATA_VENDA, '%Y - %m'), A.CPF
) X;
Vitor, continue sempre estudando e evoluindo. Fico à disposição para ajudar em caso de dúvidas.
Abraços!