如何在 SAP 中直接运行原生 SQL 语句
·
作为 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 = ''
更多推荐



所有评论(0)