January 20, 2012
oracle / fold
Вопрос: есть ли в оракле что-то типа fold?
Например задача, сэмулировать SUM без использования самого SUM.
Т.е. изначально была идея использовать SELECT ID, B, DECODE(LAG(D).. , NULL, B, B+LAG(D).. ) AS D FROM... , но оракл таких рекурсий не разрешает: ORA-00904: "D": invalid identifier
С SUM решение выглядит так:
SELECT ID, B, SUM(B) OVER (ORDER BY ID) FROM ( SELECT 1 AS ID, 100 AS B FROM DUAL UNION SELECT 2 AS ID, 50 AS B FROM DUAL UNION SELECT 3 AS ID, 200 AS B FROM DUAL ) ORDER BY ID
Так как быть без SUM?