Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cálculo c/ colunas Aliases de Colunas com SubSelects

1,067 views
Skip to first unread message

Sidney Mendes de Siqueira

unread,
Apr 12, 2006, 2:33:01 AM4/12/06
to
Olá!
Tô me matando numa coisa que parece básica mas não estou conseguindo fazer.
Alguém pode me ajudar?
O cenário é o seguinte... preciso de

select
a.Campo1,
a.Campo2,
(select sum(CampoDaTabela2) where bla bla bla = bla bla bla as Campo3,
(select sum(CampoDaTabela3) as Campo4,
(Campo3 * Campo4) as CampoCalculado
from tabela as a
inner join TabelaX as b on b.Campo1 = a.Campo1


Como minha procedure é 1 pouco grande e complexa, resolvi encenar do jeito
simples acima. Os campos 3 e 4 são colunas do meu select principal, que me
retornarão cada uma 1 determinado valor. Elas são representadas com os
apelidos que dei: Campo3 e Campo4
O quinto campo é 1 multiplicação desses 2 apelidos.

Só que o Sql não deixa dando a seguinte mensagem: "Invalid column name
'CampoCalculado'."

Se eu não puder fazer a conta (CampoCalculado) com os aliases Campo3 e
Campo4, eu vou ter que fazer a conta com o SubSelect Todo p/me retornar de
novo o primeiro valor ... multiplicando pelo SubSelect Todo p/ me retornar de
novo o segundo valor, gerando assim, o resultado, mas além de ficar
antihigiênica a procedure, ainda por cima perderia em performance 1 vez que
já possuo os valores na coluna, e creio q eu poderia fazer uso dos mesmo para
afzer o calculo que quiser

Alguém tem alguma salvação p/mim?????? Ou será q o sql é meio burrinho
mesmo! RSrsrsrs

Desde já agradeço

Marcelo Colla

unread,
Apr 12, 2006, 6:06:14 AM4/12/06
to
tem que colocar em subselect

select campo1 from (select campo as campo1 from tabela ) Drv -- onde drv e
um nome de derivada de tabela um alias.

Abs. qualquer coisa retorne.

"Sidney Mendes de Siqueira"
<SidneyMende...@discussions.microsoft.com> escreveu na mensagem
news:A42F6566-9157-4FE5...@microsoft.com...

Andre Hass

unread,
Apr 12, 2006, 7:08:01 AM4/12/06
to
Sidney vc não pode utilizar apelidos de coluna em uma multiplicação

tente assim

select
a.Campo1,
a.Campo2,
(select sum(CampoDaTabela2) where bla bla bla = bla bla bla as Campo3,

(select sum(CampoDaTabela3)) as Campo4,
(select sum(CampoDaTabela2) where bla bla bla = bla bla bla) * (select
sum(CampoDaTabela3)) as CampoCalculado


from tabela as a
inner join TabelaX as b on b.Campo1 = a.Campo1

--
Abraços
Andre Hass
Http://www.ms-it.com.br


"Sidney Mendes de Siqueira" escreveu:

Sidney Mendes de Siqueira

unread,
Apr 20, 2006, 2:24:02 AM4/20/06
to
Mas é justamente o q eu não queria. Senão a cada coluna no select terei q
refazer meu select (subquery). Eu queria que pudesse fazer referencia ao
alias que eu dei pra essa conta toda até pq a subquery é cheia de inner joins
e contas.
Tem alguma outra forma de que essa subquery seja considerada um alias e co
isso eu poder fazer contas com o alias ao inves d ter que mandar reprocessar
o que a subquery faz?????

"Andre Hass" escreveu:

Sidney Mendes de Siqueira

unread,
Apr 20, 2006, 5:16:02 AM4/20/06
to
Como assim????
Não entendi esse drv!
Poderia exemplificar?
Obrigado

"Marcelo Colla" escreveu:

Marcelo Colla

unread,
Apr 20, 2006, 6:16:59 AM4/20/06
to
o drv e um alias somente.

"Sidney Mendes de Siqueira"
<SidneyMende...@discussions.microsoft.com> escreveu na mensagem
news:C00DC953-DA24-45C3...@microsoft.com...

Sidney Mendes de Siqueira

unread,
Apr 20, 2006, 9:29:02 AM4/20/06
to
Vixi! Continuei sem entender
Até tentei simular a sua orientação c/ 1 queryzinha abaixo, bem simples, sem
ainda considerar cálculo de alias com alias, e somente alias com
constante(10):
O primeiro comentário é a simulação que fiz baseado na sua informação (DRV),
mas que dá o seguinte erro:
Server: Msg 156, Level 15, State 1, Line 19
Incorrect syntax near the keyword 'SELECT'.
Server: Msg 156, Level 15, State 1, Line 21
Incorrect syntax near the keyword 'from'.

E o segundo comentário (--) é o cálculo que eu queria... por aí eu já iria
começar a me virar, se resolvesse o problema dessas duas linhas.

Com as linhas comentadas a select funciona.

select
idorg,
(select sum(valor_total_lote) as x from hgalotes where numero_lote =
numero_lote) as soma,
(select sum(valor_total_lote) as y from hgalotes where numero_lote =
numero_lote) * 10 as calculo
---SELECT VALOR_TOTAL_LOTE FROM (select sum(valor_total_lote) as
VALOR_TOTAL_LOTE from hgalotes where numero_lote = numero_lote) DRV --* 10 as
calculo
--> Era isso aqui que eu queria: (soma * calculo)
from hgalotes where idorg = 1 group by idorg

"Marcelo Colla" escreveu:

Sidney Mendes de Siqueira

unread,
Apr 20, 2006, 9:30:02 AM4/20/06
to

"Marcelo Colla" escreveu:

> o drv e um alias somente.

0 new messages