我需要递归函数 - Teradata

时间:2016-03-03 03:02:16

标签: sql teradata

我有下表,需要计算可用房间。基本上我需要从上面的行获取计算字段并使用它来计算当前行。我尝试了前面的功能,但我不能重复使用计算字段。

我们可以在没有递归功能的情况下完成吗?如果不是递归就行了。

+---------------------------------------------------------------------------------+
| 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)     |
+---------------------------------------------------------------------------------+

1 个答案:

答案 0 :(得分:0)

累积金额是明显的解决方案:

select t.*,
       (TotalNumOfRooms - 
        sum(RoomsSold) over (order by TransactionDt range between unbounded preceding and current row)
       ) as TotalRoomsAvailable
from t;

如果这不符合您的需求,那么您应该询问另一个问题。你在这里提出的问题显然有一个简单的解决方案(使用累积总和)。如果它对您没有帮助,那么这不是正确的问题。