我有下表,需要计算可用房间。基本上我需要从上面的行获取计算字段并使用它来计算当前行。我尝试了前面的功能,但我不能重复使用计算字段。
我们可以在没有递归功能的情况下完成吗?如果不是递归就行了。
+---------------------------------------------------------------------------------+
| TransactionDt | Total#ofrooms | RoomsSold | TotalRoomsAvailable | calculatelike |
+---------------------------------------------------------------------------------+
| 1/1/16 | 15 | 1 | 14 | (15-1) |
| 1/2/16 | 15 | 2 | 12 | (14-2) |
| 1/3/16 | 15 | 1 | ? | (12-1) |
| 1/4/16 | 15 | 0 | ? | (11-0) |
| 1/5/16 | 15 | 0 | ? | (11-0) |
| 1/6/16 | 15 | 1 | ? | (11-1) |
+---------------------------------------------------------------------------------+
答案 0 :(得分:0)
累积金额是明显的解决方案:
select t.*,
(TotalNumOfRooms -
sum(RoomsSold) over (order by TransactionDt range between unbounded preceding and current row)
) as TotalRoomsAvailable
from t;
如果这不符合您的需求,那么您应该询问另一个问题。你在这里提出的问题显然有一个简单的解决方案(使用累积总和)。如果它对您没有帮助,那么这不是正确的问题。