Progress - equivalencia del "having" en progress

   
Vista:

equivalencia del "having" en progress

Publicado por jaume (1 intervención) el 13/01/2009 12:43:33
Buenos días,

Me gustaría saber como puedo programar, en progress y de una manera óptima, el equivalente de sql-92 "group by ... having ...".

Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:equivalencia del

Publicado por Miguel Angel (140 intervenciones) el 14/01/2009 16:05:36
¿El having es una especie de agrupamiento o es un corte que se realiza a la información?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:equivalencia del having

Publicado por Chemi (3 intervenciones) el 15/01/2009 12:48:55
Hola.

Por lo que se no hay equivalente al HAVING en ABL. Yo cuando necesito hacer algo similar lo tengo que hacer "a mano". Lo pongo a continuación por si te sirve de ayuda (o por si algún otro experto en Progress entiende lo que hace y encuentra una forma más óptima, porque la versión en ABL es *mucho* más lenta que la versión en SQL):

El siguiente código en SQL sirve para devolver las provincias con más de 1000 clientes y de el nº de clientes:

SELECT provincia, count(*)
FROM cliente
group by provincia
having count(*) > 1000

Para hacerlo en ABL habría que hacer algo así:

DEFINE VARIABLE i AS INTEGER NO-UNDO.

FOR EACH cliente BREAK BY provincia:
i = i + 1.
IF LAST-OF(provincia) THEN DO:
IF i > 1000 THEN DISPLAY provincia i.
i = 0.
END.
END.

Un saludo.
- Chemi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:equivalencia del having

Publicado por Miguel Angel (140 intervenciones) el 15/01/2009 15:56:28
Efectivamente como dice Chemi, no existe una sentencia que dentro del for each te de lo que hace el having. En este contexto no cabe duda que SQL aventaja por mucho al lenguaje nativo de Progress.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:equivalencia del having

Publicado por javier (5 intervenciones) el 05/03/2009 18:22:04
yo pondria este ejemplo de la sig. manera, ya que no exite una forma que te lo ponga con una sola sentencia como en sql pero es igual de eficiente.

FOR EACH cliente BREAK BY provincia:
ACCUMULATE provincia (SUB-COUNT BY provincia).
IF LAST-OF(provincia) AND (ACCUM SUB-COUNT BY provincia provincia) > 1000 THEN
DISPL provincia (ACCUM SUB-COUNT BY provincia provincia).
END.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar