MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   select (foro/showthread.php?t=5405)

mercedesmmpp 14/05/07 13:56:17

select
 
Buenas..

Quiero saber cual es el potencial de las select, pues pretendo hacer esta consulta.

select sum(campo_cantidad), distinct (campofecha+4(2))
from tabla
where
condiciones.

he intentado varias cosas, pero sin exito..

¿Alguien sabe como realizarlo usando Select?

:(

davidsap 14/05/07 14:22:24

No sé a qué te refieres exáctamente con "el potencial", pero te cuento:

No tengo ni idea de cómo hacerlo en una sóla orden pero puedes meterlo dentro de un SELECT - END SELECT. Esto ralentiza un poco la búsqueda, pero salvo que sean cientos de miles de registros tampoco tiene mucha importancia. La idea sería esto:

select campo_cantidad, campofecha
from tabla
where condiciones.

at new campofecha+4(2))
ir sumando campo_cantidad en una variable
endat
endselect

Algo así no sé. Espero que te sirva de ayuda o al menos que no te haya liado más.

abapedro 15/05/07 02:25:06

Hola,

Posiblemente se pueda llegar a conformar una frase en "open SQL" empleando SELECT para que en una sola frase se obtenga todo el efecto requerido (filtrado por condición y acumulación en cambio del valor de una parte del campo de fecha).

Mi experiencia es que las frases open SQL complejas pueden resultar muy ineficientes. Imagino que el pseudo-compilador que traduce de open SQL al SQL real de la base de datos (Oracle, MySQL, Informix o la que se esté empleando) no necesariamente produce el código SQL real mas eficiente. Resulta mejor no ponerle las cosas tan dificiles al traductor y darle varias frases mas claras y menos ambiciosas.

Como ejemplo, una frase con join de varias tablas (una de las cuales tiene mas de un millón de registros) estaba llevando a que el programa que la empleaba durara mas de 3 dias continuos (pasó de 80 horas sin terminar). Cuando dividimos la frase en varias frases equivalentes llevamos el tiempo a 10 o 12 horas.

Supongo que es como muchas cosas en la vida:

El que mucho abarca, poco aprieta ;)

mercedesmmpp 21/05/07 12:49:35

Muchas gracias por vuestras aportaciones, yo lo he resuelto asi, pero esperaba, que alguien me indicará la funciones (avg, max, min....month, day, etc) que puede tener el select en este lenguaje.

REFRESH t_anep.

error = 0.
SELECT *
INTO CORRESPONDING FIELDS OF e_anep
FROM anep WHERE
bukrs = t_anla-bukrs AND
anln1 = t_anla-anln1 AND
anln2 = t_anla-anln2 AND
gjahr = e_cuadro-gjahr AND
afabe = 01.
e_anep-mesbzdat = e_anep-bzdat+4(2).
APPEND e_anep TO t_anep.
v_invers = 0.
ENDSELECT.

IF sy-subrc <> 0.
error = 1.
ENDIF.

sumanbtr = 0.
SORT t_anep.
LOOP AT t_anep INTO e_anep.
IF v_mes = e_anep-bzdat+4(2).
sumanbtr = sumanbtr + e_anep-anbtr.
ENDIF.
ENDLOOP.

prendtorff 21/05/07 15:12:21

mas performance
 
la solucion que encontraste es buena, pero seria mucho mas performante si en vez de hacer un
SELECT *
FROM tabla
INTO CORRESPONDING FIELDS OF i_tabla
WHERE (condiciones)
ENDSELECT.

haces un
SELECT (solo los campos que necesitas)
FROM tabla
INTO TABLE i_tabla (tabla definida con solo los campos que necesitas
en el orden que los seleccionas)
WHERE (condiciones).

y luego loopeas por i_tabla sumando tus totales.



Espero esto te sirva....


Saludos!

Pablo.


Husos Horarios son GMT. La hora en este momento es 03:52:49.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web