seleccionar más de un campo dentro de uno seleccione sap abap

y un nuevo problema 🙂

Me las arreglo para hacer la selección con más selecciona y un bucle. 4 tablas ( la última fue sólo para la recogida de todos los datos )
Pero ahora estoy pensando en una manera de seleccionar todos los campos que necesite con sólo una instrucción select. Aquí está la gran seleccione 🙂

  SELECT vbak~vbeln vbak~audat
         tvakt~bezei
         vbap~posnr vbap~matnr vbap~kwmeng vbap~vrkme
         lips~vbeln lips~posnr lips~werks lips~lfimg
         vbfa~vbtyp_n
    FROM vbak JOIN vbap ON vbak~vbeln = vbap~vbeln
              JOIN tvakt ON vbak~auart = tvakt~auart
              LEFT JOIN vbfa ON vbfa~vbelv = vbak~vbeln AND vbfa~posnv = vbap~posnr
              JOIN lips ON vbfa~vbeln = lips~vbeln AND vbfa~posnn = lips~posnr
    INTO TABLE gt_salord
    WHERE tvakt~spras = 'EN' AND
          vbak~vbeln IN s_vbeln AND
          vbak~audat IN s_audat.

El problema es que esto no funciona. Cuando intento activar lanza este error: «no se puede comparar con «VBAP~POSNR». Una tabla se puede combinar con un máximo de una tabla usando LEFT OUTER JOIN»
Si yo no uso LEFT JOIN y sólo UNIRSE funciona, pero no tengo todo lo que quiero. Necesito conseguir todos los ÓRDENES de VENTA, incluso si no tienen una ORDEN de ENTREGA asignado. Hay una manera de hacer eso, o ¿realmente tengo que dividir mi select?

InformationsquelleAutor kookies | 2012-04-12

4 Kommentare

  1. 1

    He notado en SAP que es más eficiente para simplificar las instrucciones select y proceder con LAZO y SELECCIONE una tabla para que no participan en la selección de datos.

    En su caso, los datos de la tabla VBFA podría recuperar después de la selección de datos (no es la restricción de la cantidad de datos obtenidos de la DB).

    Por supuesto depende de los índices, el servidor de aplicación de almacenamiento en búfer… pero, a pesar de que podría ser contra-intuitivo para los expertos de SQL, manteniendo las instrucciones select no es demasiado compleja en SAP es el mejor.

    • Thx, sé que esta es la mejor solución, pero tenía curiosidad si puede ser hecho en una enorme seleccione. Yo sólo estaba probando 🙂 lo hice con 3 pequeños selecciona y el ‘Para todas las entradas de la declaración 😀 y un bucle para que yo pueda unir las tablas.
  2. 1

    Puede intentar la siguiente selección:

    SELECT vbak~vbeln vbak~audat
           tvakt~bezei
           vbap~posnr vbap~matnr vbap~kwmeng vbap~vrkme
           lips~vbeln lips~posnr lips~werks lips~lfimg
           vbfa~vbtyp_n
      FROM vbak JOIN vbap ON vbak~vbeln = vbap~vbeln
                JOIN tvakt ON vbak~auart = tvakt~auart
                LEFT JOIN vbfa ON vbfa~vbelv = vbap~vbeln AND vbfa~posnv = vbap~posnr
                JOIN lips ON vbfa~vbeln = lips~vbeln AND vbfa~posnn = lips~posnr
      INTO TABLE gt_salord
      WHERE tvakt~spras = 'EN' AND
            vbak~vbeln IN s_vbeln AND
            vbak~audat IN s_audat.
    

    Yo no puedo probar el resultado, pero la comprobación de la sintaxis decir: ok.

    Sólo hay una pequeña diferencia:

                                                      x---- difference
                                                      v
                    LEFT JOIN vbfa ON vbfa~vbelv = vbap~vbeln AND vbfa~posnv = vbap~posnr 
                    LEFT JOIN vbfa ON vbfa~vbelv = vbak~vbeln AND vbfa~posnv = vbap~posnr
    

    Que en comparación con vbfa~vbelv con vbak~vbeln, yo lo hago con vbap~vbeln. Ambos tienen el mismo valor, pero en el on-cláusula de utilizar de nuevo vbap.

    • sí, sé que he intentado algo pero no funcionó. 🙂 da la misma respuesta en ambos sentidos. Sí, sé que es malo hacer un join pero el uso de diferentes campos, no se formarán las mesas estoy usando en combinación.
  3. 0

    No sé acerca de SAP Abap . Pero a partir de SQL punto de vista puede utilizar derivados de la consulta de si es compatible con SAP.

    aquí es algunos de enfoque :

    select * from
    (
    select * from
    table1 inner join table2 on table1.key=table2.key
    inner join table3 on table1.key=table3.key
    ) a left outer join table4 b 
    on a.key=b.key
    

    Publicar esto como la pregunta es etiquetado como SQL. Espero que funcione

    • ok gracias, voy a probar este. creo que es compatible, pero es un pero abrumadora para el procesamiento de base de datos, el uso de seleccionar en seleccionar, si no me equivoco 🙂
    • depende de cómo se filtro y donde se pone el filtro. Otro sabio que puede ser más rápido, a continuación, no derivados de la consulta
  4. -1

    Tratar de cambiar el orden de los campos de tabla en la cláusula on de left join. Poner vbap~vbeln = vbfa~vbelv

    • ¿Por qué el downvote?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea