LOOP AT GT_ZSDT0039_A INTO GT_ZSDT0039_C. COLLECT GT_ZSDT0039_A INTO GT_ZSDT0039_C WHERE CODE = GT_ZSDT0039_C-CODE AGGREGATE DJ = SUM ( GT_ZSDT0039_C-DJ ) . ENDLOOP. WHERE 报错
时间: 2023-08-09 11:12:15 浏览: 54
在 ABAP 中,`WHERE` 关键字只能在 `SELECT` 语句中使用,不能在 `LOOP` 语句中使用。如果您想要筛选出符合条件的数据,可以使用 `IF` 语句进行判断和处理。例如:
```
LOOP AT gt_zsdt0039_a INTO gs_zsdt0039_a.
IF gs_zsdt0039_a-code = gs_zsdt0039_c-code.
gs_zsdt0039_c-dj = gs_zsdt0039_c-dj + gs_zsdt0039_a-dj.
COLLECT gs_zsdt0039_a INTO gt_zsdt0039_c.
ENDIF.
ENDLOOP.
```
这样就可以将 `gt_zsdt0039_a` 中 `CODE` 字段与 `gt_zsdt0039_c` 中相同的数据行进行求和并存入 `DJ` 字段,然后将符合条件的数据行加入到 `gt_zsdt0039_c` 中。
相关问题
写一段ABAP程序,条件如下: 底表:ZSDT0039, 字段:ZSDT0039-CODE CODE的描述是流水号(字符串类型) ZSDT0039-DJ DJ描述是净价值(数值类型) 首先从ZSDT0039表中取出所有的CODE和DJ, 将相同的CODE的DJ求和, 在判断求和后的CODE值是否大于数值1, 如果符合条件则输出消息“符合条件”否则输出“不符合条件”
以下是一个简单的 ABAP 程序,根据您提供的条件实现了相应的逻辑:
```
REPORT Z_TEST.
DATA: BEGIN OF WA_ZSDT0039,
CODE TYPE STRING,
DJ TYPE DECIMALS 10,
END OF WA_ZSDT0039.
DATA: IT_ZSDT0039 TYPE TABLE OF WA_ZSDT0039,
WA_RESULT TYPE WA_ZSDT0039.
DATA: LV_CODE TYPE STRING,
LV_DJ TYPE DECIMALS 10,
LV_SUM_DJ TYPE DECIMALS 10.
SELECT * FROM ZSDT0039 INTO TABLE IT_ZSDT0039.
LOOP AT IT_ZSDT0039 INTO WA_ZSDT0039.
LV_CODE = WA_ZSDT0039-CODE.
LV_DJ = WA_ZSDT0039-DJ.
SELECT SUM( DJ ) FROM ZSDT0039
INTO LV_SUM_DJ
WHERE CODE = LV_CODE.
IF LV_SUM_DJ > 1.
WA_RESULT-CODE = LV_CODE.
WA_RESULT-DJ = LV_SUM_DJ.
EXIT.
ENDIF.
ENDLOOP.
IF WA_RESULT-CODE IS NOT INITIAL.
WRITE: / '符合条件。CODE:', WA_RESULT-CODE, ' DJ:', WA_RESULT-DJ.
ELSE.
WRITE: / '不符合条件。'.
ENDIF.
```
程序首先通过 SELECT 语句从表 ZSDT0039 中取出所有的 CODE 和 DJ,然后通过 LOOP 循环遍历每一条记录,计算出相同 CODE 的 DJ 的总和,并在满足条件时将结果保存到 WA_RESULT 中输出。
dwm_dws_cbsjbz 小表,dwm_sap_zsdt066大表 SELECT ZYEAR,ZMONTH,ZZCPXLT,SUM(VVD02) VVD02 FROM( select a.ZYEAR, a.ZMONTH, a.KAUFN, a.KDPOS, a.MATNR, a.AUART, a.VVD02, c.ZZCPXLT from dwm_dws_cbsjbz a inner join dwm_sap_zsdt066 c on a.KAUFN = c.VBELN and a.KDPOS = c.POSNR where a.AUART = 'OR1' AND a.ZYEAR = '2023' and a.ZMONTH = '04' ) AS SFDF GROUP BY ZYEAR,ZMONTH,ZZCPXLT 优化这个语句
这个语句的优化可以从以下几个方面入手:
1. 添加索引:在dwm_dws_cbsjbz表的KAUFN和KDPOS列上添加联合索引,以及在dwm_sap_zsdt066表的VBELN和POSNR列上添加联合索引,可以提高连接查询的效率。
2. 使用子查询:将连接查询的结果作为子查询,避免了大表和小表的直接连接,减少了计算量。
优化后的SQL语句如下:
```
SELECT ZYEAR, ZMONTH, ZZCPXLT, SUM(VVD02) VVD02
FROM(
SELECT a.ZYEAR, a.ZMONTH, a.VVD02, c.ZZCPXLT
FROM dwm_dws_cbsjbz a
INNER JOIN (
SELECT VBELN, POSNR, ZZCPXLT
FROM dwm_sap_zsdt066
WHERE VBELN IN (
SELECT KAUFN
FROM dwm_dws_cbsjbz
WHERE AUART = 'OR1' AND ZYEAR = '2023' AND ZMONTH = '04'
)
) c ON a.KAUFN = c.VBELN AND a.KDPOS = c.POSNR
WHERE a.AUART = 'OR1' AND a.ZYEAR = '2023' AND a.ZMONTH = '04'
) AS SFDF
GROUP BY ZYEAR, ZMONTH, ZZCPXLT;
```
以上是一种可能的优化方式,具体实现还需要根据你的实际情况进行调整。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)