Obtener fila del almacen con precio más bajo para cada artículo.

17/05/2007 - 17:30 por Salvador Ramos | Informe spam
Hola a todos,

Tengo la siguiente tabla de artículos: almacen, articulo, descripcion,
precio, proveedor, ...
La PK es almacen+articulo
Hay una serie de almacenes, de los cuales sólo quiero la comparativa entre
el 1, 3, 5, 6 y 11.

Con la siguiente consulta obtengo las filas deseadas:
select articulo, min(precio) as PrMinimo
from avlArtic
where almacen in(1, 3, 5, 6, 11)
group by articulo

Ahora el problema es que no quiero mostrar sólo el artículo y precio mínimo,
sino que quiero mostrar todas las columnas de la tabla articulos. Si no, no
puedo saber en qué almacen es más barato ni otros datos de esa fila.

Como puedo obtener, por cada artículo, la fila correspondiente al almacen
que tiene el precio más bajo entre los seleccionados ?

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm

Preguntas similare

Leer las respuestas

#6 Salvador Ramos
18/05/2007 - 09:26 | Informe spam
Muchas gracias Alejandro,

Voy a optar por la primera solución que me propones, que es la corrección de
la que he enviado (se me olvidó incluir el where por almacen).

De momento tengo que aplicar una sintaxis compatible con 2000 por lo que
descarto la tercera opción.

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm


"Alejandro Mesa" escribió en el
mensaje news:
Salvador,

select
a.*
from
dbo.avlArtic as a
inner join
(
select articulo, min(precio) as PrMinimo
from dbo.avlArtic
where almacen in(1, 3, 5, 6, 11)
group by articulo
) as b
on a.articulo = b.articulo
and a.precio = b.PrMinimo
where
a.almacen in(1, 3, 5, 6, 11)
order by
a.articulo,
a.almacen

select
a.*
from
dbo.avlArtic as a
where
a.precio = (
select
min(b.precio)
from
dbo.avlArtic as b
where
b.articulo = b.articulo
and b.almacen in(1, 3, 5, 6, 11)
) as b
where
a.almacen in(1, 3, 5, 6, 11)
order by
a.articulo,
a.almacen

;with cte
as
(
select
*,
rank() over(partition by articulo order by precio DESC) as rank
from
dbo.avlArtic
where
almacen in(1, 3, 5, 6, 11)
)
select
*
from
cte
where
rank = 1
order by
articulo,
almacen
go


AMB


"Salvador Ramos" wrote:

Hola a todos,

Tengo la siguiente tabla de artículos: almacen, articulo, descripcion,
precio, proveedor, ...
La PK es almacen+articulo
Hay una serie de almacenes, de los cuales sólo quiero la comparativa
entre
el 1, 3, 5, 6 y 11.

Con la siguiente consulta obtengo las filas deseadas:
select articulo, min(precio) as PrMinimo
from avlArtic
where almacen in(1, 3, 5, 6, 11)
group by articulo

Ahora el problema es que no quiero mostrar sólo el artículo y precio
mínimo,
sino que quiero mostrar todas las columnas de la tabla articulos. Si no,
no
puedo saber en qué almacen es más barato ni otros datos de esa fila.

Como puedo obtener, por cada artículo, la fila correspondiente al almacen
que tiene el precio más bajo entre los seleccionados ?

Un saludo
Salvador Ramos

www.helpdna.net (información sobre SQL Server y Microsoft .Net)
www.helpdna.net/acerca_de_salvador_ramos.htm




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida