Coluna com Alias na cláusula where

22/12/2014

0

Caros colegas, tenho uma consulta no SQL Server e nela coloco um alias para uma determinada coluna. Gostaria de usar esse alias na cláusula where, porém dá erro dizendo que a coluna não existe. Seria mais ou menos assim:



select nome, (valor1 * valor2) as total from contas where total > 100



Alguém sabe como resolver ? Grata
Wanessa

Wanessa

Responder

Post mais votado

22/12/2014

Use a expressão no where: where (valor1 * valor2) > 100

Veja um script:
declare @temp table (nome varchar(50), valor1 int, valor2 int)

insert into @temp (nome,valor1, valor2) values ('Wanda',2,5)
insert into @temp (nome,valor1, valor2) values ('Ana',10,11)
insert into @temp (nome,valor1, valor2) values ('Julia',100,5)
insert into @temp (nome,valor1, valor2) values ('Brua',3,30)

select  nome,(valor1 * valor2) as total 
from @temp 
where (valor1 * valor2) > 100


Resutlado:
nome                                               total
-------------------------------------------------- -----------
Ana                                                110
Julia                                              500

Soeuseijothaz

Soeuseijothaz
Responder

Mais Posts

22/12/2014

Mariana Carvalho

Olá Wanessa,

está seguindo esse padrão?


[url]http://technet.microsoft.com/pt-br/library/ms187455%28v=sql.105%29.aspx[/url]
Responder

23/12/2014

Alex Lekao

Nao conheco outra forma a nao ser a indicada pelo Jothaz. rsrsr
Responder

23/12/2014

Marisiana Battistella

Também é possível fazer isso utilizando o HAVING: [url]http://technet.microsoft.com/pt-br/library/ms173260%28v=sql.110%29.aspx[/url]
Deve ficar +ou- assim:
select nome,
          (valor1 * valor2) as total
from contas
group by nome
having (valor1 * valor2) > 100


Não cheguei a testar...
Responder

23/12/2014

Mariana Carvalho

Melhor explicado mesmo.
Responder

24/12/2014

Alex Lekao

Verdade... kkkkk

eu esqueci dele...

kkkkkk
Também é possível fazer isso utilizando o HAVING: [url]http://technet.microsoft.com/pt-br/library/ms173260%28v=sql.110%29.aspx[/url]
Deve ficar +ou- assim:
select nome,
          (valor1 * valor2) as total
from contas
group by nome
having (valor1 * valor2) > 100


Não cheguei a testar...
Responder

24/12/2014

Marisiana Battistella

Faz parte Alex.. =D

Dentre os exemplos citados, com qual deles a performance fica melhor? Tem alguma diferença?
Responder

24/12/2014

Alex Lekao

o having acredito que fique melhor.

por ser nativo do SQL ele meio que pucha a sardinha ne? rsrsr

Tem varios outros recursos que sao utilizando com funcoes de agupamento que sao muito bons.

Sempre esqueco de menciona-los, acredito que seja pq utilizo pouco. rsrsr
Responder

24/12/2014

Marisiana Battistella

Em termos de performance não Alex... Uma vez eu tinha lido sobre isso mas não estava lembrada.

Encontrei esta explicação [url]http://aserlorenzo.com/manSQL/Oracle/dml/funcoes/having.htm[/url]
Vejam o exemplo no final da página onde diz "Considerações sobre desempenho entre WHERE e HAVING"

Entre o WHERE e o HAVING, use sempre o WHERE.
Responder

24/12/2014

Alex Lekao

Blz...

Deve ser poque tem que agrupar e tal...

Mas honestamente uso muito pouco o having(quase zero utilizacao. rsrsr).
Responder

24/12/2014

Marisiana Battistella

O WHERE filtra as informações fazendo com que menos linhas sejam verificadas, já o HAVING trás todas as linhas na consulta, agrupa e apenas depois filtra os dados que devem ser retornados.
Responder

24/12/2014

Mariana Carvalho

Só acompanhando os comentarios, conhecimentos adquiridos.
Responder

29/12/2014

Alex Lekao

entendi...

Atualmente estou usando outras clausulas, para ranqueamento, essas coisas, sao bem interessantes, tinha uma coisas que eu fazia que demora um tempao para fazer agora usando essa configucao ele demora bem menos que eu imaginava, melhorou a performance em 90%.
Responder

29/12/2014

Marisiana Battistella

90% de melhora é uma vitória!!

Se não for pedir demais... Quais são as clausulas q vc está usando?
Poderia citar algumas?
Responder

30/12/2014

Alex Lekao

Nesse caso em especifico eu utilizei a clausula over.

Clausula Over

Estou utilizando para fazer soma e agrupada por vendedores e clientes, etc.

Estou testando para utilizar com Ranqueamento.

Ele me proporcionou um ganho de 90% de performance, quase nao acreditei qdo fiz a substituicao.

Fiz a substituicao de uma subselect por ela, e foi extremamente util.

Ela me parece polivalente. rsrsr
Responder

30/12/2014

Marisiana Battistella

Que bacana!
Eu usei uma vez essa cláusula no Oracle... Para os casos que ela pode ser aplicada, é mesmo milagrosa! =D

Se não me engano, esse é mais um dos recursos que estão disponíveis nas versões mais recentes, assim como o PIVOT.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar