MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Ayuda con Inner join (foro/showthread.php?t=10785)

r.velasco 06/02/08 08:54:36

Ayuda con Inner join
 
Hola, tengo un problema con el inner join, alguien puede ayudarme? Necesito hacer un select con un inner join y un campo maximo, algo de este estilo

SELECT tabla1~dato1 tabla2~dato2 INTO (campo1, campo2) FROM tabla1 INNER JOIN tabla2 on tabla1~dato3=tabla2~dato4 where dato IN s_dato AND MAX (fecha).

Esto al compilarlo me da fallo... ¿alguien sabria decir xq? También he probado seleccionando el max, pero no funciona....

SELECT tabla1~dato1 tabla2~dato2 MAX (fecha) INTO (campo1, campo2, fecha) FROM tabla1 INNER JOIN tabla2 on tabla1~dato3=tabla2~dato4 where dato IN s_dato AND

Muchas gracias por adelantado

ZipiSAPe 06/02/08 10:22:16

Hola,

Prueba lo siguiente:

SELECT tabla1~dato1 tabla2~dato2 MAX (fecha) INTO (campo1, campo2, fecha) FROM tabla1 INNER JOIN tabla2 on tabla1~dato3=tabla2~dato4 where dato IN s_dato GROUP BY tabla1~dato1 tabla2~dato2

Además, supongo que ya lo sabrás pero por si acaso, te falta poner espacio después de los paréntesis al hacer MAX.
Yo lo he probado con un ejemplillo y me compila sin problemas.

Un saludo :)

emilio.acuna 07/02/08 08:19:03

INNER JOIN y FUNCION MAX
 
Hola, tengo una duda muy parecida como esta de nuestro colega r. velasco. :confused:

Tengo un select con un inner join y una funcion max, ocorre que es necesario coger una tabla del diccionario que encontrase asi:

Ejemplo.

Coche Año
01 2008
01 2005
02 2000
02 2001
03 1997
03 1995

La funcion MAX deberia traer todos los coches cuyo año sea maior, de esta forma:

Coche (Campo1) Año (Campo2)
01 2008
02 2000
03 1997

Esto es mi select:

SELECT
tabla1~Campo1 tabla1~Campo3 tabla1~Campo4
tabla1~Campo5 tabla1~Campo6 tabla2~Campo7
tabla2~Campo8 tabla2~Campo9 tabla2~Campo2
INTO
(wa_1-Campo1, wa_1-Campo3, wa_1-Campo4, wa_1-Campo5,
wa_1-Campo6, wa_1-Campo7, wa_1-Campo8, wa_1-Campo9,
wa_1-Campo2)
FROM tabla1 INNER JOIN tabla2 ON
tabla1~Campo1 = tabla2~Campo1 AND
tabla1~Campo3 = tabla2~Campo3 AND
tabla1~Campo4 = tabla2~Campo4
WHERE
tabla1~Campo5 IN s_Campo5 AND tabla1~Campo1 IN s_Campo1 AND
tabla2~Campo10 = p_Campo10 AND
tabla2~Campo2 = ( SELECT MAX( tabla2~Campo2 ) FROM tabla2 )
GROUP BY
tabla1~Campo1 tabla2~Campo9 tabla2~Campo8 tabla2~Campo7
tabla1~Campo6 tabla1~Campo5 tabla1~Campo4
tabla1~Campo3 tabla2~Campo2
ORDER BY
tabla1~Campo1.

APPEND wa_1 TO itab_1.

ENDSELECT.

No lo se que ocurre pues esta saliendo solo el coche leido por
primero (01 2008). No esta leyendo el cambio de coche.

Espero que alguien pueda ayudarme.

Gracias por adelantado. :)

Emilio Acuña

r.velasco 07/02/08 14:03:44

Lo primero, gracias ZipSAPe por responder, pero bueno esa parte ya lo habia probado... lo que pasa es que no lo puse en el ejemplo :confused:


Lo curioso es que mi caso es el mismo que el de Emilio... ya he (hemos) encontrado solución.

Primero con un SELECT DISTINCT metes en una tabla interna 'los coches' (pero solo una vez)

Un loop de esa tabla y dentro el anterior select, pero sin recoger ni asignar 'coche'

LOOP itab_coches.

SELECT
tabla1~Campo3 tabla1~Campo4
tabla1~Campo5 tabla1~Campo6 tabla2~Campo7
tabla2~Campo8 tabla2~Campo9 tabla2~Campo2
INTO
( wa_1-Campo3, wa_1-Campo4, wa_1-Campo5,
wa_1-Campo6, wa_1-Campo7, wa_1-Campo8, wa_1-Campo9,
wa_1-Campo2)
FROM tabla1 INNER JOIN tabla2 ON
tabla1~Campo1 = tabla2~Campo1 AND
tabla1~Campo3 = tabla2~Campo3 AND
tabla1~Campo4 = tabla2~Campo4
WHERE
tabla1~Campo5 IN s_Campo5 AND tabla1~Campo1 IN s_Campo1 AND
tabla2~Campo10 = p_Campo10 AND
tabla2~Campo2 = ( SELECT MAX( tabla2~Campo2 ) FROM tabla2 WHERE coche = itab_coches-coche)
GROUP BY
tabla2~Campo9 tabla2~Campo8 tabla2~Campo7
tabla1~Campo6 tabla1~Campo5 tabla1~Campo4
tabla1~Campo3 tabla2~Campo2

wa_1-campo1 = itab_coches-campo1.
APPEND wa_1 TO itab_1.

ENDSELECT.
ENDLOOP.

sap2006 07/02/08 14:41:43

Si no recuerdo mal (hace tiempo que no hago subconsultas) creo que no os estava funcionando porque la subconsulta debe ir en la clausula HAVING no en el where.

Saludos.

danny 07/02/08 16:10:05

Holas;
si lo k kieres es obtener el año mayor x cada coche (suponiendo
que de la otra tabla kieres recuperar un campo descripcion) :

DATA: BEGIN OF tnam OCCURS 0,
COCHE LIKE TABLE1-COCHE,
DESCOCHE LIKE TABLE2-DESCOCHE,
AÑO LIKE TABLE1-AÑO,
END OF tnam.

select A~COCHE B~DESCOCHE MAX( A~AÑO ) AS AÑO
INTO CORRESPONDING FIELDS OF TABLE TNAM
FROM TABLE1 AS A
INNER JOIN TABLE2 AS B
ON A~COCHE = B~COCHE
WHERE A~CAMPO = XXXX
GROUP BY A~COCHE B~DESCOCHE.

Saludos;


Husos Horarios son GMT. La hora en este momento es 08:00:16.

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