FOR ALL ENTRIES - Trae campos vacios

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • andresf02
    Senior Member
    • nov
    • 190

    #1

    FOR ALL ENTRIES - Trae campos vacios

    Buenas Tardes.

    Estoy haciendo un select a una tabla con gran cantidad de informacion "AUSP".

    El campo ATWRT, esta vacio para algunos registros en la tabla AUSP por lo tanto el FOR ALL ENTRIES no me toma en cuenta todo el registro dejandolo por fuera de la seleccion.

    Existe alguna forma de poder traer los campos vacios usando el for all entries??

    No se, alguna forma de darle al campo un valor diferente a null solamente mientras se esta ejecutando el select?


    SELECT objek atinn mafid klart atwrt atflv
    FROM ausp
    INTO TABLE it_ausp
    FOR ALL ENTRIES IN it_ausp_aux
    WHERE objek = it_ausp_aux-objek.


    Agradeceria cualquier ayuda ya que como esta tabla es tan grande no quisiera hacer un JOIN.
  • Alfredosite
    Senior Member
    • jul
    • 135

    #2
    Originalmente publicado por andresf02
    Buenas Tardes.

    Estoy haciendo un select a una tabla con gran cantidad de informacion "AUSP".

    El campo ATWRT, esta vacio para algunos registros en la tabla AUSP por lo tanto el FOR ALL ENTRIES no me toma en cuenta todo el registro dejandolo por fuera de la seleccion.

    Existe alguna forma de poder traer los campos vacios usando el for all entries??

    No se, alguna forma de darle al campo un valor diferente a null solamente mientras se esta ejecutando el select?


    SELECT objek atinn mafid klart atwrt atflv
    FROM ausp
    INTO TABLE it_ausp
    FOR ALL ENTRIES IN it_ausp_aux
    WHERE objek = it_ausp_aux-objek.


    Agradeceria cualquier ayuda ya que como esta tabla es tan grande no quisiera hacer un JOIN.
    Si no quieres traer vacios no seria que pongas en tu WHERE que solo vengan los no vacios?
    Es decir seguramente tu tabla it_ausp_aux esta teniendo llaves OBJEK vacias y por eso tu tabla it_ausp trae campos vacios.

    Te recomendaria que ordenes tu tabla it_ausp_aux y elimines los que tienen el campo OBJEK vacios.
    SORT it_ausp_aux BY objek.
    DELETE it_ausp_aux WHERE objek EQ SPACE.


    Y luego de ello recien hacer el select y además poner en el where que solo te devuelvan los registros de la tabla AUSP que tengan valor en el campo ATWRT. Además debes validar que la tabla it_ausp_aux nunca este vacía por cuestiones de perfomance en tu código.
    IF it_ausp_aux[] IS NOT INITIAL.
    SELECT objek atinn mafid klart atwrt atflv
    FROM ausp
    INTO TABLE it_ausp
    FOR ALL ENTRIES IN it_ausp_aux
    WHERE objek = it_ausp_aux-objek AND
    atwrt NE space.

    ENDIF.
    Espero eso sea su problema,

    Saludos,
    Editado por última vez por Alfredosite; 28/05/2010, 19:56:29.
    Saludos Cordiales,
    Alfredo Pastor Avendaño
    SAP - Consultant HCM

    Comentario

    • Mauricio Hidalgo
      Senior Member
      • may
      • 481

      #3
      Recordar o tener en cuenta que al usar FOR ALL ENTRIES del resultado final de la consulta se excluyen todas las filas duplicadas.

      Comentario

      • andresf02
        Senior Member
        • nov
        • 190

        #4
        Gracias por responder,

        Pero mi problema es el contrario. Necesito que el SELECT me incluya los registros asi no tengan valor en el campo ATWRT, es decir, si tengo la tabla interna asi:

        OBJEK|ATWRT
        10001|valor1
        10002|valor2


        y el siguiente registro a leer es:

        10003|NULL



        Quiero que igual, se inserte en la tabla interna sin importar que el campo ATWRT sea NULL

        Comentario

        • Alfredosite
          Senior Member
          • jul
          • 135

          #5
          Originalmente publicado por andresf02
          Gracias por responder,

          Pero mi problema es el contrario. Necesito que el SELECT me incluya los registros asi no tengan valor en el campo ATWRT, es decir, si tengo la tabla interna asi:

          OBJEK|ATWRT
          10001|valor1
          10002|valor2


          y el siguiente registro a leer es:

          10003|NULL



          Quiero que igual, se inserte en la tabla interna sin importar que el campo ATWRT sea NULL
          Puedes probar:

          IF it_ausp_aux[] IS NOT INITIAL.
          SELECT objek atinn mafid klart atwrt atflv
          FROM ausp
          INTO TABLE it_ausp
          FOR ALL ENTRIES IN it_ausp_aux
          WHERE objek = it_ausp_aux-objek AND
          ( atwrt IS NULL OR atwrt IS NOT NULL ).
          ENDIF.

          No se si te sirva,
          Saludos Cordiales,
          Alfredo Pastor Avendaño
          SAP - Consultant HCM

          Comentario

          • andresf02
            Senior Member
            • nov
            • 190

            #6
            hola,

            ya habia probado el ATWRT is null or ATWRT pero no funciona.
            Me va tocar resignarme y cambiar todo a LEFT OUTER JOIN

            Comentario

            • mysmb2
              Senior Member
              • ene
              • 406

              #7
              buenas,
              podes hacer 2 select a la tabla ausp
              una con el for all entries
              y el otro con la condicion que necesitas solo que en vez de INTO TABLE haces APPENDING TABLE a la tabla interna.
              Sebastián Chiavia
              http://www.programacionabap.com.ar

              Comentario

              • melerogalan
                Senior Member
                • nov
                • 142

                #8
                No entendo muy bien lo que buscas, pero con este SELECT traes los registros definidos con el campo objeck y los del campo atwrt vacio.

                SELECT objek atinn mafid klart atwrt atflv
                FROM ausp
                INTO CORRESPONDING FIELDS OF TABLE it_ausp
                FOR ALL ENTRIES IN it_ausp_aux
                WHERE objek = it_ausp_aux-objek
                OR atwrt IS NULL.
                Cada vez que un programador hace una hora extra, Dios mata a un gatito...tenlo en cuenta

                Comentario

                Trabajando...