0

所以我有一个表调用订单例如在这个表中我有这些值

   name    volume    price
1- Cisco    300       27
2- Cisco    150       26
3- Cisco     50       26

我正在尝试使用此查询:

select o.name, sum(o2.volume), o.price
from orders o, orders o2
where o.price <= o2.price
group by o.name, o.price

但是这个查询返回这个:

   name    volume    price
1- Cisco    300       27
2- Cisco    200       26

但我想要这个结果:

   name    volume    price
1- Cisco    300       27
2- Cisco    500       26

第二行应该是销售额之和:价格较高的销售额(1)+所有价格较低的销售额之和(2+3)

4

2 回答 2

0

没有内置函数来获取上一行,但是您可以对数据进行排序并使用窗口函数来获取row_number(),然后使用case语句。

ROW_NUMBER() OVER告诉 DB2 您希望如何对行进行编号。如果您选择公司名称,告诉它ROW_NUMBER() OVER (ORDER BY PRICE DESC)价格最高的行为#1,第二高的行为#2,依此类推。

我建议您检查文档并返回一个您迄今为止所做的示例,以便我们可以从那里开始。

于 2013-06-08T21:07:26.527 回答
0

我明白了,所以我这样做了:

select o.name, (select sum(o2.volume) from orders o2 where o2.price <= o.price and o2.name = o.name), ,o.price from orders o group by o.name, o.价格

于 2013-06-09T23:55:32.827 回答