Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-10-2004
oliverinf oliverinf is offline
Miembro
 
Registrado: feb 2004
Posts: 65
Poder: 21
oliverinf Va por buen camino
Query con MIN

Hola a todos, uso Firebird 1.5 y necesito hacer una consulta de los "artículos" provistos por "proveedores" que dan el menor precio (del artículo). La tabla desde donde debo sacar los registros asocia los artículos con los proveedores y tiene los siguientes campos:
- Id_ArtProv (Identificador de registro)
- Id_Articulo (Identificador del Artículo)
- Id_Proveedor (Identificador del Proveedor)
- Precio (Precio del artículo)
- Descuento (Porcentaje de descuento que da el proveedor sobre el Precio)

El resultado que deseo obtener debe tener los siguientes campos
Id_Articulo, Id_Proveedor, Precio, Descuento, PrecioMinimo
donde PrecioMinimo debe ser el mínimo valor de Precio - (Precio * Descuento * 100).
Por ejemplo, si tengo en los registros:
Id_ArtProv Id_Articulo Id_Proveedor Precio Descuento
1 10 100 100 10
2 10 200 200 10
3 20 100 300 10

El resultado que deseo obtener es:
Id_Articulo Id_Proveedor Precio Descuento PrecioMinimo
10 100 100 10 90
20 100 300 10 270

Espero haber sido claro en el planteo de mi situación

Desde ya muchas gracias.

Guillermo
Responder Con Cita
  #2  
Antiguo 12-10-2004
oliverinf oliverinf is offline
Miembro
 
Registrado: feb 2004
Posts: 65
Poder: 21
oliverinf Va por buen camino
Con el siguiente procedimiento almacenado logré obtener lo que deseo (aunque voy a seguir en la búsqueda de lograrlo con una sentencia SQL, sin usar un proc. almac.)

Código SQL [-]
CREATE PROCEDURE ARTSPROVS_PRECIOMINIMO 
RETURNS (
    ID_ART INTEGER,
    ID_PROV INTEGER,
    ARTNOMBRE VARCHAR (50),
    PROVNOMBRE VARCHAR (50),
    PREC NUMERIC (9, 2),
    DTO NUMERIC (5, 2),
    PRECIOMINIMO NUMERIC (9, 2))
AS
Declare variable Id_AAnterior integer;
BEGIN
   /* Con el Select del for obtengo los registros ordenados por
   Id_Articulo, PrecioMin. */
   Id_AAnterior = -1;
   for select A_P.ID_ARTICULO, A_P.ID_PROVEEDOR, A.NOMBRE, P.NOMBRE,
          A_P.PRECIO, A_P.DESCUENTO,
          MIN(A_P.PRECIO - (A_P.PRECIO * A_P.DESCUENTO / 100))
          from ARTICULO_PROVEEDOR A_P
             inner join ARTICULO A on (A_P.ID_ARTICULO = A.ID_ARTICULO)
             inner join PROVEEDOR P on (A_P.ID_PROVEEDOR = P.ID_PROVEEDOR)
          group by A_P.ID_ARTICULO, A_P.ID_PROVEEDOR, A.NOMBRE, P.NOMBRE,
          A_P.PRECIO, A_P.DESCUENTO
          order by A_P.ID_ARTICULO, 7
          into :Id_Art, :Id_Prov, :ArtNombre, :ProvNombre, :Prec, to, :PrecioMinimo
      do begin
         if (Id_AAnterior <> Id_Art) then
            suspend;
         Id_AAnterior = Id_Art;
   end /* for */
END

Muchas gracias a todos.
Guillermo
Responder Con Cita
  #3  
Antiguo 12-10-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Pues yo creo que con SQL involucrando los 2 campos no va a poder ser, porque tendrían que formar parte del Group By.

Pero veremos si alguien se atreve, aquí o en la Lista de Firebird.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:05:32.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi