楼主: dreamgift

有不用LOOP 得出内表一列合的方法没?

[复制链接]
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
11#
发表于 2009-9-9 09:56 | 只看该作者
原帖由 dreamgift 于 2009-9-8 23:20 发表


就2个透明表的操作逻辑还可以改进?

针对一个问题研究比针对2个表吭哧吭哧研究逻辑改进效率高的多

也许你不想到那麽多也行的话. 比吭哧吭哧......

哪个逻辑实现起来不是一个个算法?讨论一个完全没有算法的逻辑意义不大.

如果都不会差到哪去SAP给你SE30要你分析什么?

那还那麽多公司做优化干什么? 都差不到哪去.


还不如说说怎么能把MODIFY用不好?


好吧,我的意思是,如果你想得到更多的帮助,请把你的业务逻辑描述一下。

使用道具 举报

回复
论坛徽章:
2
2014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
12#
 楼主| 发表于 2009-9-9 10:41 | 只看该作者
谢谢你的耐心解答

其实这个事件块的逻辑很简单

就是通过AFPO表中的订单号和项目号 去取他们自定义表中的一个字段的合计.

我们关系不错  要我帮看看能不能快点

我一看他们原来写的肯定是不行

LOOP **.
SELECT SUM( ** ) FROM Z*
         INTO **
        WHERE ***.
ENDLOOP.

我看最少对数据库操作也是上万次  不慢才怪

我改成了For All Entries 取数  然后LOOP嵌套LOOP

快了很多.  就是想知道还有没有更好点的办法. 仅此而已.

我没有受过正规培训 都是一点点摸索 所以谈不上死读书的问题

也没有非得针对这块能不能性能再提高一点吭哧吭哧研究.

只是想有就学习接纳 没有就算了.

结果被你劈头盖脸一顿说   所以才有些出言不逊

见谅.

使用道具 举报

回复
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
13#
发表于 2009-9-9 11:24 | 只看该作者
select sum() from z* into **
where ***
group by AUFNR POSNR

一个loop都不用

使用道具 举报

回复
论坛徽章:
4
2010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:19:07参与SAP云计算之旅活动纪念
日期:2011-05-17 13:35:45ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
14#
发表于 2009-9-9 11:34 | 只看该作者
搬个椅子来学习。。。

使用道具 举报

回复
论坛徽章:
2
2014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
15#
 楼主| 发表于 2009-9-9 11:37 | 只看该作者
原帖由 awarecan 于 2009-9-9 11:24 发表
select sum() from z* into **
where ***
group by AUFNR POSNR

一个loop都不用



Where条件正常接的是上面说的从表中取出的订单号和项目号

N多

不LOOP  Where 怎么指定N多的订单号和项目号~?

再者说 即使取出来以后  又怎么对应到哪个订单号和项目号相应的数量呢?

出去吃饭..放松.   回头再仔细研究研究你说的方法.

[ 本帖最后由 dreamgift 于 2009-9-9 11:43 编辑 ]

使用道具 举报

回复
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
16#
发表于 2009-9-9 11:51 | 只看该作者
原帖由 dreamgift 于 2009-9-9 11:37 发表



Where条件正常接的是上面说的从表中取出的订单号和项目号

N多

不LOOP  Where 怎么指定N多的订单号和项目号~?

再者说 即使取出来以后  又怎么对应到哪个订单号和项目号相应的数量呢?

出去吃饭..放松.   回头再仔细研究研究你说的方法.


用for all entries in 或构造一个range table,用in
group by自然可以区分出那个订单的对应数量

看来你是个半路出家的,这都是些基础知识而已。
想做好开发,先好好学学《数据库原理》,学习一下SQL Language比较好

=======

帮人帮到底把,你把Z*那个table的结构贴上来,要统计哪个字段说好,
把你预先取好的AFPO内表的结构贴上来,
我把完整的SQL写给你

[ 本帖最后由 awarecan 于 2009-9-9 11:54 编辑 ]

使用道具 举报

回复
论坛徽章:
5
2010新春纪念徽章
日期:2010-01-04 08:33:082010年世界杯参赛球队:澳大利亚
日期:2010-01-04 16:53:012010新春纪念徽章
日期:2010-03-01 11:20:512010年世界杯参赛球队:斯洛伐克
日期:2010-04-19 08:59:22ITPUB9周年纪念徽章
日期:2010-10-08 09:28:53
17#
发表于 2009-9-9 11:54 | 只看该作者
求和最好是在选择数据时候就操作, 你这个问题很好办, 就是再建立一个相似的内表,再loop一次不就不用再loop中select了
其实abap这个东西不要太较真,规范是建立在实力上的,没实力就别要求这么高。

使用道具 举报

回复
论坛徽章:
2
2014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
18#
 楼主| 发表于 2009-9-9 12:39 | 只看该作者
表很简单  就可以直接认为取AFPO中的 AUFNR 和 POSNR

然后通过这2个取自定义表的A字段

当然   AFPO中的 AUFNR 和 POSNR 已经检索到内表中了  因为抽取的时候和AFKO,AUFK,AUVCAUVV等表关联.

不过也可以做成一个AUFNR 和 POSNR 和合计A的内表  我再重新对应

使用道具 举报

回复
论坛徽章:
11
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB元老
日期:2009-04-11 21:27:42生肖徽章2007版:牛
日期:2009-06-08 00:31:34
19#
发表于 2009-9-9 13:33 | 只看该作者
原帖由 dreamgift 于 2009-9-9 12:39 发表
表很简单  就可以直接认为取AFPO中的 AUFNR 和 POSNR

然后通过这2个取自定义表的A字段

当然   AFPO中的 AUFNR 和 POSNR 已经检索到内表中了  因为抽取的时候和AFKO,AUFK,AUVCAUVV等表关联.

不过也可以做成一个AUFNR 和 POSNR 和合计A的内表  我再重新对应


SELECT aufnr posnr SUM( A ) FROM ztable
INTO itab
FOR ALL ENTRIES IN it_afko
GROUP BY aufnr posnr
HAVING aufnr = it_afko-aufnr AND posnr = it_afko-posnr.

[ 本帖最后由 awarecan 于 2009-9-9 13:42 编辑 ]

使用道具 举报

回复
论坛徽章:
2
2014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09
20#
 楼主| 发表于 2009-9-9 14:00 | 只看该作者
谢谢  Having这个还真没用过.

等下试试.

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表