Coluna com Alias na cláusula where

SQL Server

22/12/2014

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

Curtidas 0

Melhor post

Soeuseijothaz

Soeuseijothaz

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
GOSTEI 2

Mais Respostas

Mariana Carvalho

Mariana Carvalho

22/12/2014

Olá Wanessa,

está seguindo esse padrão?


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

Alex Lekao

22/12/2014

Nao conheco outra forma a nao ser a indicada pelo Jothaz. rsrsr
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

22/12/2014

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...
GOSTEI 1
Mariana Carvalho

Mariana Carvalho

22/12/2014

Melhor explicado mesmo.
GOSTEI 0
Alex Lekao

Alex Lekao

22/12/2014

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...
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

22/12/2014

Faz parte Alex.. =D

Dentre os exemplos citados, com qual deles a performance fica melhor? Tem alguma diferença?
GOSTEI 0
Alex Lekao

Alex Lekao

22/12/2014

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
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

22/12/2014

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.
GOSTEI 0
Alex Lekao

Alex Lekao

22/12/2014

Blz...

Deve ser poque tem que agrupar e tal...

Mas honestamente uso muito pouco o having(quase zero utilizacao. rsrsr).
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

22/12/2014

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.
GOSTEI 0
Mariana Carvalho

Mariana Carvalho

22/12/2014

Só acompanhando os comentarios, conhecimentos adquiridos.
GOSTEI 0
Alex Lekao

Alex Lekao

22/12/2014

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%.
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

22/12/2014

90% de melhora é uma vitória!!

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

Alex Lekao

22/12/2014

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
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

22/12/2014

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.
GOSTEI 1
Alex Lekao

Alex Lekao

22/12/2014

Olha, nao sei dizer para vc qdo comecou a funcionar exatamente, utilizo o 2008R2 e tanto o Over qto o Pivot funcionam.

Acredito que tenham comecado a partir do 2005, mas nao sei, nem pesquisei a respeito. rssr
GOSTEI 0
Marisiana Battistella

Marisiana Battistella

22/12/2014

Acho q sim Alex, eu estava totalmente desinformada.... hehehe
Pesquisei no Oracle, existe na versões mais antigas também. Eu conheci o Oracle a partir da versão 10g.
GOSTEI 0
Alex Lekao

Alex Lekao

22/12/2014

Bom dia!!!

Blz...

Acho que eh quase impossivel conhecermos tudo. kkkk
GOSTEI 0
POSTAR