¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Realizar Join entre Tablas SAP en ABAP Query: ¿Es posible igual que en SQL?

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 79 Vistas
0
Cargando...

¿Puedo hacer esto en ABAP Query, como cuando lo hacía en el servidor SQL?

Notas: table1, table 2 son Tablas SAP.

SELECT a~field1, a~field2, a~field3, b~field3 FROM ( select field1, field2, field3 FROM table1 ) as a inner join

( select field1, field2, field3 from table2 ) as b on a~field1 = b~field2 and a~field2 = b~field2

Gracias

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Gracias por responder,

Lo siento, tal vez mi ejemplo no fue lo suficientemente claro. A continuación se muestra el que realmente quiero lograr, y sí, en el servidor SQL se utiliza '.' no '~', pero según tu explicación, supongo que no se puede usar este tipo de consulta.

SELECT x.field1, SUM(x.total1) as gt1, SUM(x.total2) as gt2 FROM 
( SELECT a.field1, a.field2, a.total1, b.total2
      FROM (SELECT field1, field2, SUM( field3 + field4 ) as Total1 FROM table1 GROUP BY field1, field2 ) AS a 
LEFT JOIN (SELECT field1, field2, SUM( field5 + field5 ) as Total2 FROM table2 GROUP BY field1, field2 ) AS b 
        ON a.field1 = b.field1
       AND a.field2 = b.field2 ) as x GROUP BY x.field1
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Please use the code button to make coding more readable. This is your question:

" Can I do this in ABAP Query, like when I used it in the SQL server?

SELECT a~field1, a~field2, a~field3, b~field3 
      FROM ( SELECT field1, field2, field3 FROM table1 ) AS a 
INNER JOIN ( SELECT field1, field2, field3 FROM table2 ) AS b 
        ON a~field1 = b~field1
       AND a~field2 = b~field2

The above SQL statement is already a mixture of ABAP SQL (still known as Open SQL) and native DB SQL. It definitly will not work in ABAP (mainly because of select from subqueries) and I doubt it will work on your SQL server (because of '~' instead of '.').

However, based on what you are trying to achieve, the result is the 'same' as the following which will work in ABAP SQL. (Given that both are written in proper native SQL, the following would also have a better performance than the above.)

SELECT a~field1, a~field2, a~field3, b~field3 
      FROM table1 AS a 
INNER JOIN table2 AS b 
        ON a~field1 = b~field1
       AND a~field2 = b~field2
INTO TABLE @DATA(itab).


With ABAP SQL, this is how you would do it with 'Common Table Expressions' (cte) available since ABAP 75x:
(but as mentioned already, performance will be worse as above ABAP statement,)

WITH
  +a AS ( SELECT field1, field2, field3 FROM table1 ),
  +b AS ( SELECT field1, field2, field3 FROM table2 )
SELECT +a~field1, +a~field2, +a~field3, +b~field3
        FROM +a 
  INNER 
            
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

¿En ABAP te refieres? (Open SQL) - "ABAP Query" (llamado SAP Query durante mucho tiempo) es algo diferente.

Si lees los ejemplos en la documentación de ABAP, sabrías sin necesidad de preguntar.

SELECT a~field1, a~field2, a~field3, b~field3
FROM table1 AS a INNER JOIN table2 as b
   on a~field1 = b~field1
  and a~field2 = b~field2
INTO TABLE @DATA(table_variable).
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Por favor, utiliza el botón de código para hacer que la codificación sea más legible. Esta es tu pregunta:

" ¿Puedo hacer esto en ABAP Query, como cuando lo usé en SQL server?

SELECT a~field1, a~field2, a~field3, b~field3 
      FROM ( SELECT field1, field2, field3 FROM table1 ) AS a 
INNER JOIN ( SELECT field1, field2, field3 FROM table2 ) AS b 
        ON a~field1 = b~field1
       AND a~field2 = b~field2

La declaración SQL anterior es una mezcla de ABAP SQL (aún conocido como Open SQL) y SQL nativo de la base de datos. Definitivamente no funcionará en ABAP (principalmente debido a la selección de subconsultas) y dudo que funcione en tu servidor SQL (debido a '~' en lugar de '.').

Sin embargo, basado en lo que estás intentando lograr, el resultado es el 'mismo' que el siguiente, que funcionará en ABAP SQL. (Dado que ambos están escritos en SQL nativo adecuado, lo siguiente también tendría un mejor rendimiento que el anterior.)

SELECT a~field1, a~field2, a~field3, b~field3 
      FROM table1 AS a 
INNER JOIN table2 AS b 
        ON a~field1 = b~field1
       AND a~field2 = b~field2
INTO TABLE @DATA(itab).


Con ABAP SQL, así es como lo harías con 'Expresiones de Tabla Comunes' (cte) disponibles desde ABAP 75x:
(pero como ya se mencionó, el rendimiento será peor que la declaración ABAP anterior,)

WITH
  +a AS ( SELECT field1, field2, field3 FROM table1 ),
  +b AS ( SELECT field1, field2, field3 FROM table2 )
SELECT +a~field1, +a~field2, +a~field3, +b
        
Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?