2016-03-03 50 views
-1

我有下表,需要計算可用房間。基本上我需要從上面的行取得計算的字段,並用它來計算當前行。我試過前面的功能,但我不能重複使用計算的字段。我需要遞歸功能嗎? - 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)  | 
+---------------------------------------------------------------------------------+ 
+0

我知道一個累計總數(售出的房間)會起作用,但我不想使用它,因爲我的問題很複雜,我給出了一個簡化的例子。 – Kash

+0

然後,告訴我們你的實際問題。 – Noel

+0

嗨@Noel - 如果上述解決方案已解決,那麼我可以很容易地找出答案。這很難重現和解釋。 thx – Kash

回答

0

累計總和是顯而易見的解決方案:

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

如果不能滿足你的需求,那麼你應該問另一個問題。你在這裏提出的問題顯然有一個簡單的解決方案(使用累計和)。如果它不能幫助你,那麼這不是正確的問題。