算法问题

[复制链接]
查看11 | 回复9 | 2009-1-4 14:52:28 | 显示全部楼层 |阅读模式
数据库操作问题.

ID state
QUANTITY
11
30
11
20
12
10
21
50
22
20
21
10

IDQUANTITY
140 (30+20-10=40)
240 (50-20+10=40)
分组判断state,如果state为1,就相加,如果state为2,就相减.
用SQL算分组减法,怎么写???
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
如果是ORACLE SQL,可以用DECODE()函数,ABAP里面没用SQL做过。
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
简单!!
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
说说看!!!
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
用OPEN SQL的话
SELECT ID, STATE, SUM(QUANTITY)
FROM table INTO TABLE itab
GROUP BY ID, STATE.
LOOP AT itab.
IF itab-state = 1.
"累加
ELSE.
"累减
ENDIF.
ENDLOOP.
如果state就两个值的话,效率还不算太差。
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
这个,写法,应该不行啊!!!
要得到的结果是
IDQUANTITY
140 (30+20-10=40)
240 (50-20+10=40)
我思路是这样
SELECT ID, STATE, SUM(QUANTITY)
FROM table INTO TABLE itab
GROUP BY ID, STATE.
LOOP AT itab.
IF itab-state = 2.
itab-qutity = 0-qutity.(就是判断字段state为2,就将字段quantity,转变为负数,然后再通过类似SUM()函数汇总算出结果.当接下来如何写就不知道了.数据表中查询函数SUM(),在内表操作中如何用????)
ENDIF.
ENDLOOP.
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
SELECT
id,
SUM(CASE state WHEN 1 THEN quantity ELSE -quantity END) AS Quantity
FROM text
GROUP BY id
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
SELECT
id,
SUM(CASE state WHEN 1 THEN quantity ELSE -quantity END) AS Quantity
FROM text
GROUP BY
这句话在"MS SQL"中执行,没问题,成功了!!
但在ABAP中,语法该如何写????有哪位朋友,能看看??
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
ABAP里SUM写不了那么复杂的表达式。
我的算法没问题
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
Abap中完成不了这种SQL吧,即使可以也不建议使用.
因为逻辑Loading会在DB.
建议先捞资料到内表里,再Loop去处理吧,Loading会在AP.
如果资料多的话效率差异明显
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行