Envio la estructura de las tablas de ejemplo, los datos , y un par de SP
haciendo un simple
select * from new procedure estaria el resultado que necesitas
moraleja : no descarteis los stored procedures suelen ser de gran utilidad
moraleja dos : RTFM de SQL antes de necesitarlo, ya que hay algunas
posibilidades como el HAVING y el UNION que suelen ser de gran utilidad
;-) y es dificil llegar a ellas sin leer el manual .
Saludos cordiales
Augusto
SET TERM ^ ;
/******************************************************************************/
/*** Stored
Procedures ***/
/******************************************************************************/
CREATE PROCEDURE CATEGORIA_S (
VALOR INTEGER)
RETURNS (
NOMBRE VARCHAR(50))
AS
BEGIN
EXIT;
END^
CREATE PROCEDURE NEW_PROCEDURE
RETURNS (
APELLIDO VARCHAR(59),
MOVIMIENTOS BIGINT,
CATEGORIA VARCHAR(50))
AS
BEGIN
EXIT;
END^
SET TERM ; ^
/******************************************************************************/
/***
Tables ***/
/******************************************************************************/
CREATE TABLE CATEGORIA (
DESDE INTEGER,
HASTA INTEGER,
NOMBRE VARCHAR(50)
);
CREATE TABLE CLIENTES (
IDCLIENTE INTEGER,
APELLIDO VARCHAR(59)
);
CREATE TABLE VENTAS (
IDCLIENTE INTEGER,
CANTIDAD INTEGER
);
INSERT INTO CATEGORIA (DESDE, HASTA, NOMBRE) VALUES (0, 4,
'CASUAL');
INSERT INTO CATEGORIA (DESDE, HASTA, NOMBRE) VALUES (5, 9, 'CHICO');
INSERT INTO CATEGORIA (DESDE, HASTA, NOMBRE) VALUES (10, 24,
'NORMAL');
INSERT INTO CATEGORIA (DESDE, HASTA, NOMBRE) VALUES (25, 9999,
'IMPORTANTE');
COMMIT WORK;
INSERT INTO CLIENTES (IDCLIENTE, APELLIDO) VALUES (1, 'GONZALEZ');
INSERT INTO CLIENTES (IDCLIENTE, APELLIDO) VALUES (2, 'GUTIERREZ');
INSERT INTO CLIENTES (IDCLIENTE, APELLIDO) VALUES (3, 'FERNANDEZ');
COMMIT WORK;
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (1, 1);
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (2, 2);
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (3, 3);
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (1, 1);
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (2, 2);
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (3, 3);
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (1, 1);
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (2, 2);
INSERT INTO VENTAS (IDCLIENTE, CANTIDAD) VALUES (3, 4);
COMMIT WORK;
/******************************************************************************/
/*** Stored
Procedures ***/
/******************************************************************************/
SET TERM ^ ;
ALTER PROCEDURE CATEGORIA_S (
VALOR INTEGER)
RETURNS (
NOMBRE VARCHAR(50))
AS
BEGIN
FOR SELECT NOMBRE
FROM CATEGORIA
where :valor between desde and hasta
INTO :NOMBRE
DO
BEGIN
SUSPEND;
END
END
^
ALTER PROCEDURE NEW_PROCEDURE
RETURNS (
APELLIDO VARCHAR(59),
MOVIMIENTOS BIGINT,
CATEGORIA VARCHAR(50))
AS
BEGIN
FOR
SELECT
CLIENTES.APELLIDO,
sum(VENTAS.CANTIDAD) movimientos,
(select nombre from categoria_s(sum(VENTAS.CANTIDAD) ))
categoria
FROM
VENTAS
INNER JOIN CLIENTES ON (VENTAS.IDCLIENTE =
CLIENTES.IDCLIENTE)
group by CLIENTES.APELLIDO
INTO :APELLIDO,
:MOVIMIENTOS,
:CATEGORIA
DO
BEGIN
SUSPEND;
END
END
^
SET TERM ; ^
Augusto Sosa Escalada wrote:
>y yo me confundí ! en lugar de count es sum,
>Dame un rato y lo pruebo, de todos modos si pudieras enviar a mi mail
>particular el esquema con datos :) yo te envío el SQL probado
>
>En este momento no me doy cuenta de como hacerlo según una tercer tabla
>de categoría en un único SQL
>
>Ahora si pudieras usar un par de stored procedures, "la vida seria mas
>fácil".
>
>Saludos cordiales
>
>Augusto
>
>
>Pablo Zagni wrote:
>
>
>
>>Augu... Buenisimo! pero los tramos los tengo definidos en otra tabla!
>>explico las tablas
>>
>>CLIENTES
>>IDCLIENTE APELLIDO
>>1 GONZALEZ
>>2 GUTIERREZ
>>3 FERNANDEZ
>>
>>CATEGORIAS
>>DESDE HASTA NOMBRE
>>0 4 CASUAL
>>5 9 CHICO
>>10 24 NORMAL
>>25 9999 IMPORTANTE
>>
>>VENTAS
>>IDCLIENTE CANTIDAD
>>1 1
>>2 2
>>3 3
>>1 1
>>2 2
>>3 3
>>1 1
>>2 2
>>3 4
>>
>>Entonces el cliente 1 compró 3 unidades, el 2 6 unidades y el 3 10 unidades
>>
>>quiero un listado
>>GONZALEZ CASUAL
>>GUTIERREZ CHICO
>>FERNANDEZ NORMAL
>>
>>Saludos
>>Lic. Pablo Zagni
>>www.FuelSoftware.com.ar
>>Buenos Aires, Argentina
>>
>>Augusto Sosa Escalada wrote:
>>
>>
>>
>>
>>>Termino de probar esto y aunque a alguno le parezca un poco demencial,
>>>funcionó bien, habria que ver si entendi bien la pregunta :-p
>>>
>>>
>>>saludos
>>>
>>>
>>> select NRO_CLIENTE,count(canunidades) ventas , 'Poco ' categoria
>>> from VTA_DET_MOV
>>> group by NRO_CLIENTE
>>> having count(canunidades) between 1 and 10
>>> union
>>> select NRO_CLIENTE,count(canunidades) ventas , 'Medio ' categoria
>>> from VTA_DET_MOV
>>> group by NRO_CLIENTE
>>> having count(canunidades) between 11 and 20
>>> union
>>> select NRO_CLIENTE,count(canunidades) ventas , 'Mucho ' categoria
>>> from VTA_DET_MOV
>>> group by NRO_CLIENTE
>>> having count(canunidades) between 21 and 30
>>>
>>>
>>>
>>>
>>>Pablo Zagni wrote:
>>>
>>>
>>>
>>>>Utilizo Firebird.
>>>>Tengo una tabla de clientes, uan de categoria de clientes, y una tabla
>>>>de ventas.
>>>>las categorias son de acuerdo a las ventas, la cantidad de productos
>>>>comprados
>>>>1-4 : casual
>>>>5-10: chico
>>>>10-25: normal
>>>>25-999: importante
>>>>
>>>>cómo hago la consulta para que me diga la categoria en que esta cada
>>>>cliente?
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>--
>>>No virus found in this outgoing message.
>>>Checked by AVG Anti-Virus.
>>>Version: 7.0.300 / Virus Database: 265.8.4 - Release Date: 01/02/2005
>>>
>>>
>>>
>>>------------------------------
>>>DesarrolloDelphi:
>>>Desarrollo de Software en Borland Delphi
>>>------------------------------
>>>Direcciones de la lista:
>>>Publicar un mensaje: DesarrolloDelphi@...
>>>Suscribirse........: DesarrolloDelphi-Subscribe@...
>>>Desuscribirse......: DesarrolloDelphi-Unsubscribe@...
>>>Administrador......: DesarrolloDelphi-Owner@...
>>>Página de la lista.: http://www.gruposyahoo.com.ar/group/DesarrolloDelphi
>>>------------------------------
>>>
>>>
>>>------------------------------------------------------------------------
>>>*Enlaces de Yahoo! Grupos*
>>>
>>> * Para visitar el sitio web del grupo, andá a:
>>> http://ar.groups.yahoo.com/group/DesarrolloDelphi/
>>>
>>> * Para cancelar tu suscripción a este grupo, enviá un mensaje a:
>>> DesarrolloDelphi-unsubscribe@...
>>>
<mailto:DesarrolloDelphi-unsubscribe@...?subject=Unsubscribe>
>>>
>>> * El uso de Yahoo! Grupos está sujeto a las Condiciones del servicio
>>> de Yahoo! <http://ar.docs.yahoo.com/info/utos.html>.
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>------------------------------
>>DesarrolloDelphi:
>>Desarrollo de Software en Borland Delphi
>>------------------------------
>>Direcciones de la lista:
>>Publicar un mensaje: DesarrolloDelphi@...
>>Suscribirse........: DesarrolloDelphi-Subscribe@...
>>Desuscribirse......: DesarrolloDelphi-Unsubscribe@...
>>Administrador......: DesarrolloDelphi-Owner@...
>>Página de la lista.: http://www.gruposyahoo.com.ar/group/DesarrolloDelphi
>>------------------------------
>>Enlaces de Yahoo! Grupos
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>
>
--
Augusto Sosa Escalada
SIAF - Gerente de Tecnología
www.siafonline.com.ar
Gabriel Ardoino 514
(B1704EIL)Ramos Mejia
Buenos Aires - Argentina
Tel. 4943 9100 int 343
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.300 / Virus Database: 265.8.4 - Release Date: 01/02/2005