tablas internas

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • brujibu
    Junior Member
    • nov
    • 5

    #1

    tablas internas

    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
    Member
    • jul
    • 71

    #2
    Originalmente publicado por brujibu
    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

    Comentario

    • brujibu
      Junior Member
      • nov
      • 5

      #3
      Gracias pero para lo qu eyo lo necesito no puedo utilizar inner join como podria hacerlo?

      gracias

      Comentario

      • Bmamba
        Member
        • jun
        • 91

        #4
        Originalmente publicado por brujibu
        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
        Editado por última vez por Bmamba; 26/03/2009, 13:24:42.

        Comentario

        • jacmono
          Member
          • jun
          • 48

          #5
          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.
          Jack of all Trades

          Comentario

          • brujibu
            Junior Member
            • nov
            • 5

            #6
            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.

            Comentario

            • gugutin
              Member
              • jul
              • 71

              #7
              Originalmente publicado por brujibu
              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.

              Comentario

              • bisonye
                Senior Member
                • ago
                • 635

                #8
                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
                http://sapymas.blogspot.com/

                Comentario

                • Tonnyman
                  Member
                  • dic
                  • 53

                  #9
                  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.

                  Comentario

                  Trabajando...