我有一个产品列表和一个与单个表中销售数量相对应的计数。数据布局如下:
Product Name QTY_SOLD
Mouse 23
Keyboard 25
Monitor 56
TV 10
Laptop 45
...
我想创建一个组 ID,如果售出数量的 ROLLING 总和大于 50,则创建组。我们可以按产品名称订购以获得类似于以下的输出。
Product Name QTY_SOLD GROUP_NBR
Keyboard 25 1
Laptop 45 1
Monitor 56 2
Mouse 23 3
TV 10 3
我创建了一个案例语句来创建我需要的输出,但是如果我想将组 id 截止值从 50 更改为 100,或者如果我获得更多产品和数量,我必须不断更改案例语句。有没有一种简单的方法可以使用递归或其他方法来适应这种情况?这适用于 Teradata 13.10
UPDATE main FROM prod_list AS main,
(
SEL PROD_NAME
, QTY_SOLD
, SUM(QTY_SOLD) OVER (ORDER BY PROD_NAME ROWS UNBOUNDED PRECEDING) RUNNING FROM prod_list
) inr
SET GROUP_NBR = CASE
WHEN RUNNING < 50 THEN 1
WHEN RUNNING > 50 AND RUNNING < 100 THEN 2
WHEN RUNNING > 100 AND RUNNING < 150 THEN 3
WHEN RUNNING > 150 AND RUNNING < 200 THEN 4
WHEN RUNNING > 200 AND RUNNING < 250 THEN 5
ELSE 6
END
WHERE main.PROD_NAME = inr.PROD_NAME ;