作为 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 ONBSEG.MANDT = BKPF.MANDT
AND BSEG.BUKRS = BKPF.BUKRS
AND BSEG.GJAHR = BKPF.GJAHR
AND BSEG.BELNR = BKPF.BELNR
WHEREBSEG.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-TWHEREXXXXXAND XXXXX
GROUP BY 项目 A、项目 B、项目 C /* 枚举要汇总的关键项目 */
HAVING COUNT(*) >= 2 /* 如果有超过 2 条记录,则输出 */
2.5 对 A、B、C 项求和,并提取总和大于等于 ◯◯ 的记录。
SELECTitem_A+item_B+item_C, /* sum of items A,B,C */item_A,item_B, item_C,
FROM TABLE-T
WHEREitem_A+item_B+item_C >= 100 /* Extract items A,B,C whose sum is greater than or equal to 100 */
3 SQL 模板
3.1 找出哪些行项目在其组件中具有特定项
SELECTMAST.MATNR /*物料*/,MAST.WERKS /*工厂*/,MAST.STLAN /*用途*/,MAST.STLAL /*代替BOM*/,STPO.STLNR /*BOM*/,STPO.IDNRK /*组件*/
FROMSTPO
INNER JOIN MASTON MAST.MANDT = STPO.MANDTAND MAST.STLNR = STPO.STLNR
WHERESTPO.MANDT = '100' /*客户端*/AND STPO.IDNRK = 'A123456789' /*组件编号*/
3.2 检查行项目的组件
SELECTMAST.MATNR,MAST.WERKS,MAST.STLAN,MAST.STLAL,STPO.STLNR,STPO.IDNRK
FROMSTPO
INNER JOIN MASTON MAST.MANDT = STPO.MANDTAND MAST.STLNR = STPO.STLNRAND MAST.MATNR = 'A123456789'
WHERESTPO.MANDT = '100'
3.3 物料主数据(合并 MARC、MARA、MVKE、MBEW)
SELECT MARC.*, MARA.*, MVKE.*, MBEW.*
FROM MARC
INNER JOIN MARAON MARA.MANDT = MARC.MANDTAND MARA.MATNR = MARC.MATNR
INNER JOIN MVKEON MVKE.MANDT = MARC.MANDTAND MVKE.MATNR = MARC.MATNR
INNER JOIN MBEWON MBEW.MANDT = MARC.MANDTAND MBEW.MATNR = MARC.MATNRAND MBEW.BWKEY = MARC.WERKS
WHEREMARC.MANDT = '100'AND MARC.MATNR = 'A123456789'
3.4 获取项目的标准单位
SELECT * FROM PLPOINNER JOIN PLASON PLAS.MANDT = PLPO.MANDTAND PLAS.PLNTY = PLPO.PLNTYAND PLAS.PLNNR = PLPO.PLNNRAND PLAS.PLNKN = PLPO.PLNKNAND PLAS.LOEKZ = ''INNER JOIN PLKOON PLKO.MANDT = PLPO.MANDTAND PLKO.PLNTY = PLPO.PLNTYAND PLKO.PLNNR = PLPO.PLNNRAND PLKO.PLNAL = PLAS.PLNALAND PLKO.LOEKZ = ''AND PLKO.PLNTY = 'N'AND PLKO.VERWE = '1'AND PLKO.STATU = 4INNER JOIN MAPLON MAPL.MANDT = PLPO.MANDTAND MAPL.PLNTY = PLPO.PLNTYAND MAPL.PLNNR = PLPO.PLNNRAND MAPL.PLNAL = PLKO.PLNALAND MAPL.LOEKZ = ''AND MAPL.MATNR IN ('XXXXXXX') AND MAPL.WERKS = 'D100'WHEREPLPO.MANDT = '100'AND PLPO.LOEKZ = ''