SELECT matnr serge external _ number stat oper _ date oper _ time matnr serge oper message FROM INTO CORRESPONDING FIELDS OF TABLE lt _ tplnr _ dtl FOR ALL ENTRIES IN lt _ acct _ org WHERE external _ number = lt _ acct _ org - account _ number AND matnr ='1014000' OR matnr ='1016000' OR matrr = '1135000' OR matrnr ='1136000' OR stat E0006' GROUP BY external _ number matnr HAVING COUNT (*)=1. 这段代码 FOR ALL ENTRIES IN和HAVING COUNT (*) 冲突。如何修改。注意,stat状态判断是matnr没有数据取stat为E0006
时间: 2024-02-14 18:12:18 浏览: 18
可以将代码修改为以下形式来解决冲突并实现所需功能:
```
SELECT matnr, serge, external_number, stat, oper_date, oper_time, oper_message
FROM lt_tplnr_dtl
INNER JOIN lt_acct_org ON external_number = lt_acct_org-account_number
WHERE (matnr IN ('1014000', '1016000', '1135000', '1136000') OR stat = 'E0006')
GROUP BY external_number, matnr, serge, stat, oper_date, oper_time, oper_message
HAVING COUNT(DISTINCT matnr) = 1.
```
这个修改后的代码使用了 INNER JOIN 子句来连接 lt_tplnr_dtl 和 lt_acct_org 两个表。同时,将 WHERE 子句中的条件用括号括起来,以确保 OR 运算符的优先级正确。然后使用 GROUP BY 和 HAVING 子句来限制结果集,只保留 external_number 和 matnr 均唯一的记录。最后,将 stat 的判断条件移动到 WHERE 子句中,并使用 DISTINCT 关键字来确保仅计算唯一的 matnr 记录数。
相关问题
SELECT matnr serge external _ number stat oper _ date oper _ time matnr serge oper message FROM INTO CORRESPONDING FIELDS OF TABLE lt _ tplnr _ dtl FOR ALL ENTRIES IN lt _ acct _ org WHERE external _ number = lt _ acct _ org - account _ number AND matnr ='1014000' OR matnr ='1016000' OR matrr = '1135000' OR matrnr ='1136000' OR stat E0006' GROUP BY external _ number matnr HAVING COUNT (*)=1. 这段代码 FOR ALL ENTRIES IN和HAVING COUNT (*) 冲突。如何修改
可以将代码改为以下形式来避免冲突:
SELECT matnr, serge, external_number, stat, oper_date, oper_time, oper_message
FROM lt_tplnr_dtl
WHERE external_number IN (lt_acct_org-account_number)
AND matnr IN ('1014000', '1016000', '1135000', '1136000')
AND stat = 'E0006'
GROUP BY external_number, matnr, serge, stat, oper_date, oper_time, oper_message
HAVING COUNT(DISTINCT external_number, matnr) = 1.
这个修改后的代码与原代码具有相同的功能,但避免了 ALL ENTRIES 和 COUNT(*) 冲突的问题。
BAPI_OUTB_DELIVERY_CREATE_STO的用法,给一下示例
BAPI_OUTB_DELIVERY_CREATE_STO是一个SAP函数模块,用于创建一个STO交货单。以下是一个简单的示例代码:
```
DATA: ls_header TYPE bapiobdlhdr,
lt_item TYPE TABLE OF bapiobdlitem,
ls_item TYPE bapiobdlitem,
lt_pack TYPE TABLE OF bapiobdlpack,
ls_pack TYPE bapiobdlpack,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
* Fill the header data
ls_header-vbeln_vl = '12345678'. "Delivery document number
ls_header-werks = '1000'. "Plant
ls_header-lfart = 'ZSTO'. "Delivery type
* Fill the item data
ls_item-posnr = '000010'. "Item number
ls_item-matnr = 'ABC123'. "Material number
ls_item-werks = '1000'. "Plant
ls_item-lfimg = 10. "Delivery quantity
APPEND ls_item TO lt_item.
* Fill the package data
ls_pack-posnr = '000010'. "Item number
ls_pack-scan_st = 'X'. "Scan status
APPEND ls_pack TO lt_pack.
* Call the function module
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
EXPORTING
headerdata = ls_header
TABLES
itemdata = lt_item
packdata = lt_pack
return = lt_return.
* Check the return table for any errors
LOOP AT lt_return INTO ls_return.
IF ls_return-type = 'E' OR ls_return-type = 'A'.
MESSAGE ls_return-message TYPE 'E'.
ENDIF.
ENDLOOP.
```
在上面的示例中,我们填充了交货单的头部、行项目和包装信息,并使用函数模块BAPI_OUTB_DELIVERY_CREATE_STO创建了交货单。请注意,这只是一个简单的示例,实际应用中可能需要更多的数据和逻辑处理。