作为 ABAP 开发应该知道,SAP 支持在程序中运行 ABAP SQL,但是如果想要运行原生 SQL,就要借助 SQL 编辑器了。

Ps:你得向 Basis 申请权限。

SQL 编辑器允许您直接执行 SQL 语句。

1 SQL 编辑器启动方式

它可以在以下 T-code 中执行。它们是相同的功能,但似乎存在细微的差异,例如是否可以通过 ECC 或 S/4 启用/不激活,以及是否可以使用 SQL 编辑器以外的功能/不使用。

  • DB02
  • DBACOCKPIT
  • ST04

调用事务后,可以在 诊断 > SQL 编辑器 中启动(在 ECC 中,它是 SQL 命令编辑器)。

如图:

2 使用方式

在界面中央的 “Input Query”(输入查询) 中输入 SQL 语句,然后单击 “Execute”(执行)。然后,执行结果显示在 “Result”(结果) 选项卡中。

例如,如果使用以下 SQL,则可以显示相应凭证的会计凭证标题 (BKPF) 和凭证详细信息 (BSEG) 的视图。

SELECT *
FROM BSEG
INNER JOIN BKPF ON
    BSEG.MANDT = BKPF.MANDT
AND BSEG.BUKRS = BKPF.BUKRS
AND BSEG.GJAHR = BKPF.GJAHR
AND BSEG.BELNR = BKPF.BELNR
WHERE
    BSEG.MANDT = '800'
AND BSEG.BELNR = '10000000'

2.1 注释

/* 要注释掉的字符 */.
--注释掉之后的所有内容(“--”行之后的所有内容均被注释掉)

2.2 多选

WHERE BSEG.BELNR IN ('会计凭证编号1', '会计凭证编号2')  /* 由 IN 子句指定 */

2.3 合并表 A 和表 B,并从 B 中的表中提取 A *EXISTS

SELECT *
FROM TABLE-A AS A
WHERE EXISTS(
    SELECT * FROM TABLE-B AS B /* SELECT 1 可能更好。 */
    WHERE A.MANDT = B.MANDT /*说明合适的连接条件 */
      AND A.BELNR = B.BELNR /*说明合适的连接条件 */
      AND A.RBUKRS = B.RBUKRS /*说明适当的连接条件 */
      AND B.MANDT = '800' /* 表 B 的提取条件 */
      AND B.BELNR = '10000000' /*表 B 的提取条件 */
)
AND A.BUZEI = '10' /* 表 A 的提取条件 */ )

2.4 按具体项目汇总并检查 Case 数量

SELECT item A, item B, item C, count(*) /* 按项目 A、B、C 聚合 */
  FROM TABLE-T
    WHERE
      XXXXX
    AND XXXXX
GROUP BY 项目 A、项目 B、项目 C /* 枚举要汇总的关键项目 */
HAVING COUNT(*) >= 2 /* 如果有超过 2 条记录,则输出 */

2.5 对 A、B、C 项求和,并提取总和大于等于 ◯◯ 的记录。

SELECT
  item_A+item_B+item_C, /* sum of items A,B,C */
  item_A,
  item_B, 
  item_C, 
FROM TABLE-T
WHERE
  item_A+item_B+item_C >= 100 /* Extract items A,B,C whose sum is greater than or equal to 100 */

3 SQL 模板

3.1 找出哪些行项目在其组件中具有特定项

SELECT
    MAST.MATNR /*物料*/
    ,MAST.WERKS /*工厂*/
    ,MAST.STLAN /*用途*/
    ,MAST.STLAL /*代替BOM*/
    ,STPO.STLNR /*BOM*/
    ,STPO.IDNRK /*组件*/
FROM
    STPO
INNER JOIN MAST
    ON  MAST.MANDT = STPO.MANDT
    AND MAST.STLNR = STPO.STLNR
WHERE
    STPO.MANDT = '100' /*客户端*/
    AND STPO.IDNRK = 'A123456789' /*组件编号*/

3.2 检查行项目的组件

SELECT
    MAST.MATNR
    ,MAST.WERKS
    ,MAST.STLAN
    ,MAST.STLAL
    ,STPO.STLNR
    ,STPO.IDNRK
FROM
    STPO
INNER JOIN MAST
    ON  MAST.MANDT = STPO.MANDT
    AND MAST.STLNR = STPO.STLNR
    AND MAST.MATNR = 'A123456789'
WHERE
    STPO.MANDT = '100'

3.3 物料主数据(合并 MARC、MARA、MVKE、MBEW)

SELECT 
    MARC.*, 
    MARA.*, 
    MVKE.*, 
    MBEW.*
FROM MARC
INNER JOIN MARA
    ON  MARA.MANDT = MARC.MANDT
    AND MARA.MATNR = MARC.MATNR
INNER JOIN MVKE
    ON  MVKE.MANDT = MARC.MANDT
    AND MVKE.MATNR = MARC.MATNR
INNER JOIN MBEW
    ON  MBEW.MANDT = MARC.MANDT
    AND MBEW.MATNR = MARC.MATNR
    AND MBEW.BWKEY = MARC.WERKS
WHERE
    MARC.MANDT = '100'
    AND MARC.MATNR = 'A123456789'

3.4 获取项目的标准单位

SELECT * FROM PLPO

INNER JOIN PLAS
  ON PLAS.MANDT = PLPO.MANDT
 AND PLAS.PLNTY = PLPO.PLNTY
 AND PLAS.PLNNR = PLPO.PLNNR
 AND PLAS.PLNKN = PLPO.PLNKN
 AND PLAS.LOEKZ = ''

INNER JOIN PLKO
  ON PLKO.MANDT = PLPO.MANDT
 AND PLKO.PLNTY = PLPO.PLNTY
 AND PLKO.PLNNR = PLPO.PLNNR
 AND PLKO.PLNAL = PLAS.PLNAL
 AND PLKO.LOEKZ = ''
 AND PLKO.PLNTY = 'N'
 AND PLKO.VERWE = '1'
 AND PLKO.STATU = 4

INNER JOIN MAPL
  ON MAPL.MANDT = PLPO.MANDT
 AND MAPL.PLNTY = PLPO.PLNTY
 AND MAPL.PLNNR = PLPO.PLNNR
 AND MAPL.PLNAL = PLKO.PLNAL
 AND MAPL.LOEKZ = ''
 AND MAPL.MATNR IN ('XXXXXXX') 
 AND MAPL.WERKS = 'D100'

WHERE
     PLPO.MANDT = '100'
 AND PLPO.LOEKZ = ''

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐