db2 在SQL查询中运行计算

r6hnlfcb  于 2022-11-07  发布在  DB2
关注(0)|答案(3)|浏览(244)

我有一个包含数字列表的表:

select SERIAL, CHANGE from TABLE

我得到这样的结果:
现在我想做一个运行总数,从另一个查询得到的数字开始,比如:

select NUMBER from NUMBERLIST

假设NUMBER是44。我想构造一个查询,它给出:

0     0    44
1    35    79
2    10    89
3    -3    86
4     2    88
5     9    97

这在SQL中可行吗?

kpbpu008

kpbpu0081#

是的,这是可行的,但我不太确定你想看到的结果。
例如:

SELECT COLUMN1, (COLUMN1 + 44) as 'COLUMN2' FROM NUMBERLIST

应该会给予你两列结果。第一列包含原始数据。第二列包含原始数据+ 44,我们也将其命名为'COLUMN2'。
如果您只想查看+44的数据,则:

SELECT (COLUMN1 + 44) as 'COLUMN NAME' FROM NUMBERLIST

我刚刚意识到你想从另一个查询中的一个数字添加。在这个例子中,你需要一个嵌套的选择。例如:

SELECT (SELECT NUMBER FROM TABLE) as 'COLUMN1', ((SELECT NUMBER FROM TABLE) + 44) AS 'COLUMN2'
iyr7buue

iyr7buue2#

试试看:

SELECT 
  SERIAL
, DECODE (SERIAL, 0, 0, CHANGE) AS CHANGE
, SUM (CHANGE) OVER (ORDER BY SERIAL) AS CHANGE_TOTAL
FROM
(
  SELECT SERIAL, CHANGE
  FROM 
  /*
  (
  VALUES
    (1, 35)
  , (2, 10)
  , (3, -3)
  , (4,  2)
  , (5,  9)
  ) 
  */
  TABLE --(SERIAL, CHANGE)

    UNION ALL

  SELECT 0 AS SERIAL, NUMBER AS CHANGE 
  FROM 
  --(VALUES 44) 
  NUMBERLIST 
  --(NUMBER)
)

如果取消注解已注解掉的行,则可以按原样运行该语句,并获得以下结果:
| 序列号|变更|变更_总计|
| - -|- -|- -|
| 第0页|第0页|四十四岁|
| 一个|三十五个|七十九|
| 2个|10个|八十九|
| 三个|-3个|八十六人|
| 四个|2个|八十八个|
| 五个|九个|九十七|

oyjwcjzk

oyjwcjzk3#

您可以将这两个查询结合在一起,然后使用函数sum()over()进行累积求和来完成此操作:

select id , val , SUM(val) over( order by id) As SumVal from (
select 0 As id , number As val from NUMBERLIST
union 
select id , val from Table_1 ) T

第一个函数或查询必须只返回一行。
所述结果

相关问题