PDA

Ver la Versión Completa : tablas internas


brujibu
24/03/09, 08:53:05
Tengo un problema quiero hacer un select a dos campo de un atabla y otra select a otros dos campos de otra tabla fisica, y luego introducir todos los datos en una tabla interna. como hago despues de haber sacado los datos de cada tabla en 2 tablas internas, introducirlos en una tabla interna para sacarlos por la Alv.

Gracias.

gugutin
24/03/09, 09:56:54
Tengo un problema quiero hacer un select a dos campo de un atabla y otra select a otros dos campos de otra tabla fisica, y luego introducir todos los datos en una tabla interna. como hago despues de haber sacado los datos de cada tabla en 2 tablas internas, introducirlos en una tabla interna para sacarlos por la Alv.

Gracias.

Hola brujibu,

Yo supongo que lo que necesitas es esto haces un inner join si es posible de las dos tablas y defines tu tabla interna con los campos que necesitas, ahi va un ejemplo de inner join pos si lo necesitas.

select a~bukrs a~kunnr a~gjahr a~blart a~budat a~belnr a~xblnr a~gsber
into corresponding fields of table it_bsid
from ( bsid as a
inner join bsad as b
on a~bukrs = b~bukrs
and a~gjahr = b~gjahr )
where a~bukrs = p_bukrs
and a~gjahr = p_gjahr.

Aqui la IT_BSID es tu tabla interna.

Saludos

brujibu
26/03/09, 12:22:39
Gracias pero para lo qu eyo lo necesito no puedo utilizar inner join como podria hacerlo?

gracias

Bmamba
26/03/09, 13:10:45
Tengo un problema quiero hacer un select a dos campo de un atabla y otra select a otros dos campos de otra tabla fisica, y luego introducir todos los datos en una tabla interna. como hago despues de haber sacado los datos de cada tabla en 2 tablas internas, introducirlos en una tabla interna para sacarlos por la Alv.

Gracias.

Yo creo que te vale con hacer el segundo select poniendo APPENDING CORRESPONDING FIELDS OF TABLE tutablainterna.

Me explico mejor: El primer select que realices un select.. into corresponding fields of table tutablainterna y el segundo como te dije más arriba.

Saludos

jacmono
26/03/09, 15:31:27
Creo que ayudaría mucho si clarificas tu pregunta.

Tienes un caso como este?:
Tabla1 => Campo1, Campo2
Tabla2 => Campo3, Campo4
TablaResultado=> Campo1, Campo2, Campo3, Campo4

ó de esta otra forma??:
Tabla1 => Campo1, Campo2
Tabla2 => Campo1, Campo2
TablaResultado=> Campo1, Campo2

Ambos requieren aproximaciones diferentes.
Para el primer caso tendrías que buscar las llaves comunes y obtener los campos correspondientes. La mejor forma es con el uso de inner-join.
Para el segundo caso, simplemente con APPENDING CORRESPONDING FIELDS OF TABLE tabla1 y luego repites con tabla2.
De ahí puede haber mas complejidades, como no aceptar valores repetidos, nulos, etcétera.

Si ninguno de los casos aplica, entonces proporciona mas información y recibirás una respuesta mas útil.

Saludos.

brujibu
27/03/09, 06:50:30
Quiero el primer caso pero no con inner join como lo puedo hacer?

Tienes un caso como este?:
Tabla1 => Campo1, Campo2
Tabla2 => Campo3, Campo4
TablaResultado=> Campo1, Campo2, Campo3, Campo4

gracias.

gugutin
27/03/09, 07:09:24
Quiero el primer caso pero no con inner join como lo puedo hacer?

Tienes un caso como este?:
Tabla1 => Campo1, Campo2
Tabla2 => Campo3, Campo4
TablaResultado=> Campo1, Campo2, Campo3, Campo4

gracias.

Bueno compañero,

Dado tu requerimiento, lo facil sera que en tus tablas internas guardes campos comunes que te sirvan para relacionarlas entre si, luego haces un loop a la primera y un read table with ( campocomun ) a la segunda TI, despues lo cargas todo en tu tabla de salida para el alv.

Esto sera mas tedioso y segun el volumen de datos bastante mas lento, pero entiendo que es lo que requieres.

Saludos y espero haberte ayudado.

bisonye
27/03/09, 07:10:20
Tienes que tener campos que relacionen las dos tablas. La mejor opción es la que comenta Bmamba. Recuperas los datos de la primera tabla y haces el select a la segunda con un for all entries.

Para eso necesitas saber que campos relacionan las dos tablas.

Por cierto, si diese más detalles sería más fácil dar con la solución. En lugar de un post parece un acertijo.

Saludos

Tonnyman
27/03/09, 13:00:28
Creo que lo que necesitas seria algo como esto:

TYPES: BEGIN OF t_table,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
vbeln TYPE vbak-vbeln,
vbtyp TYPE vbak-vbtyp,
index TYPE i,
END OF t_table,

BEGIN OF t_vbak,
vbeln TYPE vbak-vbeln,
vbtyp TYPE vbak-vbtyp,
index TYPE i,
END OF t_vbak.

DATA: gwa_vbak TYPE t_vbak,
gi_table TYPE TABLE OF t_table,
gi_vbak TYPE TABLE OF t_vbak,
gv_count TYPE i.

FIELD-SYMBOLS: <fs_table> TYPE t_table,
<fs_vbak> TYPE t_vbak.

SELECT belnr gjahr
INTO TABLE gi_table
FROM bkpf.

LOOP AT gi_table ASSIGNING <fs_table>.
add 1 to gv_count.
<fs_table>-index = gv_count.
ENDLOOP.

CLEAR gv_count.

SELECT vbeln vbtyp
INTO TABLE gi_vbak
FROM vbak.

LOOP AT gi_vbak ASSIGNING <fs_vbak>.
add 1 to gv_count.
<fs_vbak>-index = gv_count.
ENDLOOP.

sort gi_table by index.
SORT gi_vbak by index.

LOOP AT gi_table ASSIGNING <fs_table>.
READ TABLE gi_vbak WITH KEY index = <fs_table>-index INTO gwa_vbak.
IF sy-subrc = 0.
<fs_table>-vbeln = gwa_vbak-vbeln.
<fs_table>-vbtyp = gwa_vbak-vbtyp.
ENDIF.
ENDLOOP.

Pero, me parece que para ello necesitarias tener la certeza de que en ambas tablas internas tengas la misma cantidad de registro.

Saludos.