【发布时间】:2020-04-02 12:13:48
【问题描述】:
免责声明:我正在使用 Teradata 并尝试构建视图
我有这个要查询的视图:
+----------+------+------------+---------------+---------+-------+
| scenario | week | sold_store | sold_customer | returns | price |
+----------+------+------------+---------------+---------+-------+
| past | 1 | 5000 | 2500 | 100 | 50 |
| future | 2 | 100 | 50 | null | 50 |
| future | 3 | 50 | 10 | null | 50 |
+----------+------+------------+---------------+---------+-------+
我需要计算未来的回报,以及“opening_stock”,即我们还有多少商品可以在商店出售。
当场景是“过去”时,returns = 返回(因为我们已经有了过去的数据)
返回,当场景是未来时 = -0.05 * Opening_stock(我们称之为returns_v2)
Opening_stock = running total = SUM(sold_store - sold_customer +returns) over (ORDER by week)(除了 3 个值应该是第 1 周的值)
事情是,对于回报,说
Case Scenario
WHEN 'past' then returns
ELSE -0.05 * Opening_SIT
END as returns_v2
不起作用,因为 Opening_SIT 使用了原始的“返回”列(例如,通过我在子查询中作为列保留的 LAG())而不是我刚刚使用 CASE 语句计算的列。
我的最终目标是:
+----------+------+------------+---------------+---------+-------+---------------+
| scenario | week | sold_store | sold_customer | returns | price | Opening_stock |
+----------+------+------------+---------------+---------+-------+---------------+
| past | 1 | 5000 | 2500 | -100 | 50 | null |
| future | 2 | 200 | 50 | -120 | 50 | 2400 |
| future | 3 | 50 | 10 | -121.5 | 50 | 2430 |
+----------+------+------------+---------------+---------+-------+---------------+
主要问题是Opening_Stock 使用第1 周的回报,它应该在未来的第一周这样做,但是我需要它来获取第1 周的returns_v2。 而且,returns_v2 需要能够使用 Opening_Stock。
我不知道如何编写查询来做到这一点,无论我使用多少子查询......感觉就像一个我无法摆脱的无限循环。
【问题讨论】: