Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 2
            [id] => 505176
            [titulo] => Coluna com Alias na cláusula where
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-12-22 18:32:15
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 238223
            [status] => A
            [isExample] => 
            [NomeUsuario] => soeuseijothaz
            [Apelido] => jothaz
            [Foto] => 238223_20141108222927.jpg
            [Conteudo] => Use a expressão no where: where (valor1 * valor2) > 100

Veja um script:
[code]
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
[/code]

Resutlado:
[code]
nome total
-------------------------------------------------- -----------
Ana 110
Julia 500
[/code] ) )

Coluna com Alias na cláusula where

Wanessa
   - 22 dez 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

Post mais votado

Jothaz
   - 22 dez 2014

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

Veja um script:
#Código

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:
#Código
nome                                               total
-------------------------------------------------- -----------
Ana                                                110
Julia                                              500

Mariana Carvalho
   - 22 dez 2014

Olá Wanessa,

está seguindo esse padrão?

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

Alex Lekao
   - 23 dez 2014

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

Marisiana
   - 23 dez 2014

Também é possível fazer isso utilizando o HAVING: http://technet.microsoft.com/pt-br/library/ms173260%28v=sql.110%29.aspx
Deve ficar +ou- assim:
#Código

select nome,
          (valor1 * valor2) as total
from contas
group by nome
having (valor1 * valor2) > 100


Não cheguei a testar...

Mariana Carvalho
   - 23 dez 2014

Melhor explicado mesmo.

Alex Lekao
   - 24 dez 2014

Verdade... kkkkk

eu esqueci dele...

kkkkkk

Citação:
Também é possível fazer isso utilizando o HAVING: http://technet.microsoft.com/pt-br/library/ms173260%28v=sql.110%29.aspx
Deve ficar +ou- assim:
#Código

select nome,
          (valor1 * valor2) as total
from contas
group by nome
having (valor1 * valor2) > 100


Não cheguei a testar...

Marisiana
   - 24 dez 2014

Faz parte Alex.. =D

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

Alex Lekao
   - 24 dez 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

Marisiana
   - 24 dez 2014

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

Encontrei esta explicação http://aserlorenzo.com/manSQL/Oracle/dml/funcoes/having.htm
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.

Alex Lekao
   - 24 dez 2014

Blz...

Deve ser poque tem que agrupar e tal...

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

Marisiana
   - 24 dez 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.

Mariana Carvalho
   - 24 dez 2014

Só acompanhando os comentarios, conhecimentos adquiridos.

Alex Lekao
   - 29 dez 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%.

Marisiana
   - 29 dez 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?

Alex Lekao
   - 30 dez 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

Marisiana
   - 30 dez 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.

Alex Lekao
   - 02 jan 2015

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

Marisiana
   - 02 jan 2015

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.

Alex Lekao
   - 03 jan 2015

Bom dia!!!

Blz...

Acho que eh quase impossivel conhecermos tudo. kkkk