在一次选择中选择更多字段



我设法用更多的选择和一个循环进行选择。 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"如果我不使用左加入,只有加入它可以工作,但我没有得到我想要的所有东西。我需要获取所有销售订单,即使他们没有分配交货订单。有没有办法做到这一点,或者我真的必须拆分我的选择?

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

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

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

你能尝试以下选择吗:

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.

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

只有一个微小的区别:

                                                  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

我不知道 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。希望它有效

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

相关内容

  • 没有找到相关文章