Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Consulta Where

O WHERE foi feito considerando os campos AUX1.QUANTIDADE_MES e AUX1.[VOLUME DE COMPRA], tentei fazer o WHERE inicialmente com o nome do campo STATUS_VENDA, mas o mesmo retornou com erro. Não seria possível usar essa sintaxe?

SELECT AUX1.NOME, AUX1.ANO_MES, AUX1.[VOLUME DE COMPRA], AUX1.QUANTIDADE_MES, 
CONVERT(DECIMAL(15,2), ( (AUX1.QUANTIDADE_MES/AUX1.[VOLUME DE COMPRA]) - 1) * 100) AS VARIACAO, 
CASE WHEN AUX1.QUANTIDADE_MES <= AUX1.[VOLUME DE COMPRA] THEN 'VENDA VÁLIDA'
WHEN AUX1.QUANTIDADE_MES > AUX1.[VOLUME DE COMPRA] THEN 'VENDA INVÁLIDA'
END AS STATUS_VENDA
FROM 
(SELECT TC.NOME, CQ.ANO_MES, CQ.QUANTIDADE_MES, TC.[VOLUME DE COMPRA]
FROM
(SELECT NF.CPF, SUBSTRING(CONVERT(VARCHAR, NF.[DATA], 120),1,7) AS ANO_MES, 
SUM(INF.QUANTIDADE) AS QUANTIDADE_MES  FROM [NOTAS FISCAIS] NF
INNER JOIN [ITENS NOTAS FISCAIS] INF
ON NF.NUMERO = INF.NUMERO 
GROUP BY NF.CPF, SUBSTRING(CONVERT(VARCHAR, NF.[DATA], 120),1,7)) CQ
INNER JOIN [TABELA DE CLIENTES] TC ON TC.CPF = CQ.CPF) AUX1
**WHERE STATUS_VENDA = 'VENDA INVÁLIDA'**
ORDER BY AUX1.NOME, AUX1.ANO_MES
2 respostas
solução!

Olá Gustavo, tudo bem?

Não é possível utilizar o ALIAS no WHERE, você precisa utilizar diretamente os campos. Isso acontece devido a ordem lógica de execução da consulta SQL, ou seja, como é feita a consulta internamente no banco de dados.

Como por exemplo, a ordem correta da sintaxe que escrevemos a consulta é:

1- SELECT

2- FROM

3- WHERE

4- GROUP BY

5- ORDER BY

Porém, internamente, a execução é feita em outra ordem:

1- FROM

2- WHERE

3- GROUP BY

4- SELECT

5- ORDER BY

  • Primeiro o FROM, para identificar quais as tabelas que fazem parte da consulta
  • Segundo o WHERE, para realizar o filtro das linhas que devem ser retornadas.
  • Terceiro o GROUP BY, que realiza o agrupamento das linhas
  • Quarto o SELECT, que seleciona as linhas a serem retornadas, baseado no que já foi buscado
  • Quinto ORDER BY, ordena resultado a ser retornado

Esta ordem pode variar. Mas, normalmente o WHERE sempre é executado antes do SELECT, e como o ALIAS é criado apenas após a execução do SELECT, não é possível referência ao ALIAS na cláusula WHERE. Porém, podemos utilizar, por exemplo, o ALIAS no ORDER BY.

Abraços e bons estudos!

Muito obrigado Danielle!