Como seleccionar estos registros ??

11/03/2008 - 13:53 por Penta | Informe spam
Estimados.
Utilizo SQL SERVER 2000 SP4

Tengo una tabla, que tiene lo siguiente:

codigo nivel cantidad

Primer caso:

codigo nivel cantidad
1 1 2
1 3 3
1 8 5

Necesito quedarme con el 3er registro que es el que tiene una mayor
numero en el campo cantidad. por otro lado, y este es el 2do caso:

codigo nivel cantidad
2 1 3
2 3 3

Aca necesito quedarme con el primer registro, ya que tienen la misma
cantidad pero el nivel que deseo debe ser el menor.

Ojala pudiesen ayudarme y si es posible hacerlo en una misma consulta.

Siempre agradecido del foro.
Penta.

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
11/03/2008 - 14:26 | Informe spam
Si estos son los datos, con cuál registro usted se quedaría?

codigo nivel cantidad
1 1 2
1 3 3
1 8 5
1 7 6



Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Penta" wrote:

Estimados.
Utilizo SQL SERVER 2000 SP4

Tengo una tabla, que tiene lo siguiente:

codigo nivel cantidad

Primer caso:

codigo nivel cantidad
1 1 2
1 3 3
1 8 5

Necesito quedarme con el 3er registro que es el que tiene una mayor
numero en el campo cantidad. por otro lado, y este es el 2do caso:

codigo nivel cantidad
2 1 3
2 3 3

Aca necesito quedarme con el primer registro, ya que tienen la misma
cantidad pero el nivel que deseo debe ser el menor.

Ojala pudiesen ayudarme y si es posible hacerlo en una misma consulta.

Siempre agradecido del foro.
Penta.


Respuesta Responder a este mensaje
#2 Alejandro Mesa
11/03/2008 - 14:30 | Informe spam
Penta,

Trata:

select *
from t1 as a
where
not exists (
select *
from t1 as b
where
b.codigo = a.codigo
and
(
b.cantidad > a.cantidad
or
(
b.cantidad = a.cantidad
and b.nivel < a.nivel
)
)
)
go

AMB

"Penta" wrote:

Estimados.
Utilizo SQL SERVER 2000 SP4

Tengo una tabla, que tiene lo siguiente:

codigo nivel cantidad

Primer caso:

codigo nivel cantidad
1 1 2
1 3 3
1 8 5

Necesito quedarme con el 3er registro que es el que tiene una mayor
numero en el campo cantidad. por otro lado, y este es el 2do caso:

codigo nivel cantidad
2 1 3
2 3 3

Aca necesito quedarme con el primer registro, ya que tienen la misma
cantidad pero el nivel que deseo debe ser el menor.

Ojala pudiesen ayudarme y si es posible hacerlo en una misma consulta.

Siempre agradecido del foro.
Penta.


Respuesta Responder a este mensaje
#3 Alejandro Mesa
11/03/2008 - 14:33 | Informe spam
;with cte
as
(
select
codigo, nivel, cantidad,
row_number() over(partition by codigo order by cantidad DESC, nivel ASC)
as rn
from t1
)
select codigo, nivel, cantidad
from cte
where rn = 1
go


AMB


"Alejandro Mesa" wrote:

Penta,

Trata:

select *
from t1 as a
where
not exists (
select *
from t1 as b
where
b.codigo = a.codigo
and
(
b.cantidad > a.cantidad
or
(
b.cantidad = a.cantidad
and b.nivel < a.nivel
)
)
)
go

AMB

"Penta" wrote:

> Estimados.
> Utilizo SQL SERVER 2000 SP4
>
> Tengo una tabla, que tiene lo siguiente:
>
> codigo nivel cantidad
>
> Primer caso:
>
> codigo nivel cantidad
> 1 1 2
> 1 3 3
> 1 8 5
>
> Necesito quedarme con el 3er registro que es el que tiene una mayor
> numero en el campo cantidad. por otro lado, y este es el 2do caso:
>
> codigo nivel cantidad
> 2 1 3
> 2 3 3
>
> Aca necesito quedarme con el primer registro, ya que tienen la misma
> cantidad pero el nivel que deseo debe ser el menor.
>
> Ojala pudiesen ayudarme y si es posible hacerlo en una misma consulta.
>
> Siempre agradecido del foro.
> Penta.
>
>
Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
11/03/2008 - 14:39 | Informe spam
Hola Penta,


On 11 mrt, 13:53, Penta wrote:
Estimados.
Utilizo SQL SERVER 2000 SP4

Tengo una tabla, que tiene lo siguiente:

codigo nivel cantidad

Primer caso:

codigo nivel cantidad
1          1        2
1          3        3
1          8        5

Necesito quedarme con el 3er registro que es el que tiene una mayor
numero en el campo cantidad. por otro lado, y este es el 2do caso:

codigo nivel cantidad
2          1        3
2          3        3

Aca necesito quedarme con el primer registro, ya que tienen la misma
cantidad pero el nivel que deseo debe ser el menor.

Ojala pudiesen ayudarme y si es posible hacerlo en una misma consulta.

Siempre agradecido del foro.
Penta.




Entiendo que quieres agrupar el resultado por codigo y que
para cada codigo quieres el registro con la mayor cantidad
y dentro de esa cantidad el menor nivel.


Digamos que tu tabla se llama tx.


select *
from tx t1
where t1.cantidad = (select max(cantidad)
from tx
where codigo=t1.codigo)
and
t1.nivel = (select min(nivel)
from tx
where codigo=t1.codigo and
cantidad = (select max(cantidad)
from tx
where codigo=t1.codigo))


O así:

select t1.codigo,
(select min(nivel)
from tx
where codigo=t1.codigo and
cantidad = (select max(cantidad)
from tx
where codigo=t1.codigo)) as nivel,
max(t1.cantidad) as cantidad
from tx t1
group by t1.codigo

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 jcac
11/03/2008 - 14:42 | Informe spam
Hola Penta

Espero esto te ayude:

create table #tmp(codigo int, nivel int, cantidad int)
go
insert into #tmp values (1, 1, 2)
insert into #tmp values (1, 3, 3)
insert into #tmp values (1, 8, 5)
insert into #tmp values (2, 1, 3)
insert into #tmp values (2, 3, 3)
go
select t.codigo, (select min(nivel) from #tmp where t.codigo = codigo and
max(t.cantidad) = cantidad) as nivel, max(t.cantidad) as cantidad
from #tmp t
group by t.codigo
go
select * from #tmp
go
drop table #tmp
go

Saludos

Juan Carlos
"Penta" escribió en el mensaje
news:
Estimados.
Utilizo SQL SERVER 2000 SP4

Tengo una tabla, que tiene lo siguiente:

codigo nivel cantidad

Primer caso:

codigo nivel cantidad
1 1 2
1 3 3
1 8 5

Necesito quedarme con el 3er registro que es el que tiene una mayor
numero en el campo cantidad. por otro lado, y este es el 2do caso:

codigo nivel cantidad
2 1 3
2 3 3

Aca necesito quedarme con el primer registro, ya que tienen la misma
cantidad pero el nivel que deseo debe ser el menor.

Ojala pudiesen ayudarme y si es posible hacerlo en una misma consulta.

Siempre agradecido del foro.
Penta.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida