0

我有问题。目前我有三个表,第一个表是主表,如果第二个表没有记录,也写它。但是如果第二个表中存在一条记录,那么从第三个表中显示“dispo”信息..

我想使用三个 SAP 表 - lagp、lqua 和 marc。我的目标是从 lagp 写入所有股票头寸。

2x LEFT JOIN 不起作用:“无法与“B~MATNR”进行比较。一个表最多可以与另一个表连接,使用 LEFT OUTER JOIN。

结构:

TYPES:
  BEGIN OF t_work,
    lgnum TYPE lgnum,
    lgtyp TYPE lgtyp,
    lgpla TYPE lgpla,
    bdatu TYPE lagp_bdatu,
    matnr TYPE matnr,
    verme TYPE lqua_verme,
    meins TYPE meins,
    dispo TYPE dispo,
  END OF t_work.
DATA:
  lt_work TYPE TABLE OF t_work INITIAL SIZE 0,
  ls_work LIKE LINE OF lt_work.

和 SQL 命令:

SELECT a~lgnum a~lgtyp a~lgpla a~bdatu b~matnr b~verme b~meins c~dispo FROM lagp AS a
   LEFT JOIN lqua AS b ON a~lgnum = b~lgnum AND a~lgtyp = b~lgtyp AND a~lgpla = b~lgpla
  INNER JOIN marc AS c ON b~matnr = c~matnr AND b~werks = c~werks
  INTO TABLE lt_work
   WHERE a~lgnum IN so_lgnum
     AND a~lgtyp IN so_lgtyp
     AND a~skzua EQ space
     AND a~skzue EQ space.

但结果只有一个股票头寸 - http://i.stack.imgur.com/1sEEo.png

你能告诉我,SQL 代码的样子吗?

谢谢

4

2 回答 2

1

尝试:

SELECT a~lgnum, a~lgtyp, a~lgpla, a~bdatu, b~matnr, b~verme, b~meins, c~dispo 
   FROM lagp AS a
   LEFT JOIN ( lqua AS b 
               JOIN marc AS c ON b~matnr = c~matnr AND b~werks = c~werks )
          ON a~lgnum = b~lgnum AND a~lgtyp = b~lgtyp AND a~lgpla = b~lgpla 
  INTO TABLE @lt_work
   WHERE a~lgnum IN @so_lgnum
     AND a~lgtyp IN @so_lgtyp
     AND a~skzua EQ @space
     AND a~skzue EQ @space.

其他选择是将 LQUA 和 MARC 之间的连接放在一个视图中,并与该视图进行外部连接。或者拆分 MARC 上的选择并在循环使用 LAGP 和 LQUA 上的选择找到的数据时执行此操作。

于 2015-06-22T17:17:50.940 回答
0

我得到了很好的工作代码:

  SELECT ma~matnr ma~mtart ma~ernam ma~ersda ma~laeda
  de~maktx as maktx_de fr~maktx as maktx_fr it~maktx as maktx_it
  FROM mara as ma
  LEFT JOIN MAKT as de ON de~matnr = ma~matnr AND de~spras = 'DE'
  LEFT JOIN MAKT as fr ON fr~matnr = ma~matnr AND fr~spras = 'FR'
  LEFT JOIN MAKT as it ON it~matnr = ma~matnr AND it~spras = 'IT'
  INTO CORRESPONDING FIELDS OF TABLE g_it_material
  WHERE ma~ernam IN so_ERNAM
  AND ma~laeda IN so_LAEDA
  AND ma~matnr IN so_MATNR.

它工作正常。你对多左连接有什么看法?

于 2015-08-14T12:56:08.990 回答