MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 06/02/08, 08:54:36
r.velasco r.velasco is offline
Junior Member
 
Fecha de Ingreso: feb 2008
Mensajes: 5
Question 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
Responder Con Cita
  #2  
Viejo 06/02/08, 10:22:16
ZipiSAPe ZipiSAPe is offline
Junior Member
 
Fecha de Ingreso: dic 2007
Mensajes: 3
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
Responder Con Cita
  #3  
Viejo 07/02/08, 08:19:03
emilio.acuna emilio.acuna is offline
Junior Member
 
Fecha de Ingreso: feb 2008
Mensajes: 2
INNER JOIN y FUNCION MAX

Hola, tengo una duda muy parecida como esta de nuestro colega r. velasco.

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
Responder Con Cita
  #4  
Viejo 07/02/08, 14:03:44
r.velasco r.velasco is offline
Junior Member
 
Fecha de Ingreso: feb 2008
Mensajes: 5
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


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.
Responder Con Cita
  #5  
Viejo 07/02/08, 14:41:43
sap2006 sap2006 is offline
Senior Member
 
Fecha de Ingreso: mar 2006
Mensajes: 134
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.
Responder Con Cita
  #6  
Viejo 07/02/08, 16:10:05
danny danny is offline
Member
 
Fecha de Ingreso: mar 2007
Mensajes: 36
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;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

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


Husos Horarios son GMT. La hora en este momento es 23:10:58.


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