SQL Server - campos calculados en sql server

 
Vista:

campos calculados en sql server

Publicado por Marco (1 intervención) el 08/01/2009 20:08:06
Hola

tengo un sistema que tiene la BD en SYBASE ASA el cual lo estamos migrando a SQL SERVER 2008 y tengo el problema de que tengo querys que usan en la clausula where referencias a campos compute o campos calculados que estan en el select, por ejemplo:

select
campo1,
sum(campo2) as suma
from
tabla
where
suma = 0 ;

este query funciona perfectamente en sybase pero al momento de correrlo sobre sql server no admite la referencia en este caso al alias "suma"

si lo pongo de la sigueinte forma en sql server si funciona

select
campo1,
sum(campo2) as suma
from
tabla
where
sum(campo2) = 0 ;

mas sin embargo esto me parece algo ineficiente ya que el calculo de "sum(campo2)" se tiene que hacer dos veces, cuento con querys que tienen campos bastante complejos y me gustaria saber si existe una forma de que esto funcione para sql server.

bueno espero haberme explicado bien y gracias por su ayuda

saludos

MAGT
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:campos calculados en sql server

Publicado por Isaias (3308 intervenciones) el 08/01/2009 22:36:30
Cierto, en SQL SERVER, no se puede referenciar el ALIAS creado en un SELECT.

Tal vez quedaria asi:

select campo1, sum(campo2) as suma
from tabla
group by campo1
having sum(campo2) = 0

No tengo forma de probarlo

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:campos calculados en sql server

Publicado por Liliana (151 intervenciones) el 09/01/2009 12:35:03
Hola,
A la correcta respuesta de Isaías, quisiera agregar que en casos como éste, la complicación de no poder usar un alias, es solo para el desarrollador, ya que el optimizador del motor resuelve solamente UNA vez la operación, mantiene el resultado en una variable interna (no accesible para nosotros) y la usa cada vez que hacemos referencia a dicha operación en nuestro query.
Si estás familiarizado con el plan de ejecución, podrás comprobarlo.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar