在一个选择abap sap中选择更多字段

时间:2012-04-12 06:14:54

标签: select left-join sap where abap

和一个新问题:)

我设法通过更多选择和循环进行选择。 4个表(最后一个表仅用于收集所有数据) 但现在我正在考虑用一种选择语句选择我需要的所有字段的方法。这是巨大的选择:)

  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.

问题是这不起作用。当我尝试激活它时会抛出此错误:“无法与”VBAP~POSNR“进行比较。使用LEFT OUTER JOIN可以将表连接到最多一个其他表” 如果我不使用LEFT JOIN并且只加入它可以工作,但我没有得到我想要的所有。我需要获得所有销售订单,即使他们没有分配交货订单。有没有办法做到这一点,还是我真的要分开我的选择?

4 个答案:

答案 0 :(得分:1)

您可以尝试以下选择:

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.

我无法测试结果,但语法检查说:ok。

只有一个微小的差异:

                                                  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

您将vbfa~vbelvvbak~vbeln进行了比较,我使用vbap~vbeln进行了比较。两者都具有相同的值,但在on - 子句中,您再次使用vbap

答案 1 :(得分:1)

我在SAP中注意到,简化select语句并为不参与数据选择的表继续使用LOOP和SELECT SINGLE更有效。

在您的情况下,可以在选择数据后获取表VBFA中的数据(它不限制从数据库中提取的数据量)。

当然它取决于索引,应用程序服务器缓冲......但是,尽管对SQL专家来说可能是违反直觉的,但在SAP中保持选择语句不太复杂是最好的。

答案 2 :(得分:0)

我不知道SAP Abap。但是从SQL的角度来看,如果SAP支持派生查询,则可以使用派生查询。

这是一些方法:

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

发布此问题标记为SQL。希望它有效

答案 3 :(得分:-1)

尝试更改左连接的on子句中的表字段的顺序。把vbap~vbeln = vbfa~vbelv