Alias en clausulas

Hola Brownsea, te adjunto una solución que me propusiste vos ante una inquietud que me había surgido:
declare @data table (nom varchar(10), val int)
insert into @data values ('jose', 4)
insert into @data values ('jose', 5)
insert into @data values ('jose', 6)
insert into @data values ('su', 17)
insert into @data values ('su', 14)
insert into @data values ('su', 15)
insert into @data values ('su', 16)
insert into @data values ('su', 17)
select nom, val
from (
select nom, val, rank () over ( partition by nom order by nom, val desc) ranking
from @data
)a
where ranking in (1,2)
Analizando el código, ¿mi pregunta es por que ranking siendo un alias es admitido por el where y de la siguiente manera no me lo admite?
select nom, val, rank () over ( partition by nom order by nom, val desc) ranking
from @data
where ranking in (1,2)
¿Me sale una advertencia que no se reconoce la palabra ranking
A que se debe esto? No me queda claro...
¿Qué clausulas de Sql admiten alias? Me gustaría que me digas cuales.
Eso es todo.
Gracias y saludos!
damimg

1 Respuesta

Respuesta
1
Para que pueda funcionar tu qry en tu where en vez de poner el alias debes usar rank () over ( partition by nom order by nom, val desc) in (1,2) ya que los alias no pueden ser usados en la clausula where, pero si en el order by.
Ahora, porque me funciona a mi, es porque si te das cuenta yo hago el where a ranking ya como columna y no como alias, ya que previamente hize un select a otro select
select ranking from (select dato as ranking from tabla1)a where ranking>1
esto quiere decir que el alias ranking se convierte en columna al hacerle un select a la subconsulta.
Gracias por responder.
Hice lo que me has dicho y no me compila
Código
select cliente,importe,rank () over ( partition by cliente order by importe desc)
from clientes
where rank () over ( partition by nom order by nom, val desc) in (1,2)
Me dice lo siguiente:
Warning
Mens. 4108, Nivel 15, Estado 1, Línea 2
Las funciones de división de particiones sólo pueden aparecer en las cláusulas SELECT u ORDER BY.
¿Cómo lo arreglo brownsea?
Saludos
damimg
Al parecer la solución no admite que este en el select, lo que tienes que hacer es esto:
select cliente, importe
from (
select cliente,importe,rank () over ( partition by cliente order by importe desc) ranking
From clientes
) a
where ranking in (1,2)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas