Написание все oop на Teradata - PullRequest
0 голосов
/ 01 марта 2020

Я не написал много sprocs в Teradata, и я изо всех сил пытаюсь получить результат, который мне нужен. Хотя я уверен, что это должно быть относительно просто:)

Мне нужно сделать сумму из трех столбцов - запас, продажи и поставки. sales фактически отрицательное значение. Результат суммы должен дать мне stock для следующего ряда. Если сумма трех столбцов <0, тогда мне нужно взять 0 в качестве значения. </p>

Заранее признателен за помощь

Вот пример того, что я пытаюсь сделать в ссылка расчет запаса

stock_for_next_week рассчитывается по сумме трех столбцов stock, sales, deliveries. И затем этот номер нужно использовать как номер stock для следующей недели, у меня есть только номер stock для неделя 1 . Если оно падает ниже нуля, оно должно быть равно нулю (следовательно, почему кумулятивные суммы не работают). Расчет разделен на продукт.

1 Ответ

0 голосов
/ 01 марта 2020

Сначала рассчитайте промежуточную сумму на основе начальных запасов и еженедельных продаж и поставок . Затем вычислите текущее значение MIN по этому результату, если оно отрицательное, скорректируйте промежуточное значение:

SELECT ...
   running_total - 
   Min(Least(running_total, 0)) 
   Over (PARTITION BY Product
         ORDER BY Week
         ROWS Unbounded Preceding) as stock_for_next_week
FROM
 ( SELECT ...
      First_Value(stock) -- initial stock
      Over (PARTITION BY Product
            ORDER BY Week) +
      Sum(sales+deliveries) -- weekly numbers
      Over (PARTITION BY Product
            ORDER BY Week
            ROWS Unbounded Preceding) AS running_total
   FROM tab
 ) AS dt
...