SQL 服务器 - 多个 SUM CASE WHEN

SQL Server - Multiple SUM CASE WHEN

第一次发帖,如有问题请见谅。
我对写作并不陌生 SQL 但我也不是专家。

我需要一个更好的写法:

CASE
WHEN OrderQuantity + Week1Quantity >= CriteriaAmount THEN 1
WHEN OrderQuantity + Week1Quantity + Week2Quantity >= CriteriaAmount THEN 2
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity >= CriteriaAmount THEN 3
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity >= CriteriaAmount THEN 4
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity + Week5Quantity >= CriteriaAmount THEN 5
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity + Week5Quantity + Week6Quantity >= CriteriaAmount THEN 6
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity + Week5Quantity + Week6Quantity + Week7Quantity > CriteriaAmount THEN 7
WHEN OrderQuantity + Week1Quantity + Week2Quantity + Week3Quantity + Week4Quantity + Week5Quantity + Week6Quantity + Week7Quantity + Week8Quantity >= CriteriaAmount THEN 8
ELSE 999
END

它的目的是找到目标被击中的第一阶段,使用每一列的数值作为总计 运行。

Table 像这样:

订单数量第 1 周第 2 周第 3 周(建议目标)
.........5............5.............5.............5.....................15.................
.......10.............10...... ..10.........10............ ......500............

在上面的 table 行中,第 1 行的答案是 2,因为还有 2 周的时间才能达到目标。
第 2 行将落在给出 999 的 ELSE 语句上,稍后将转换为错误。

我想要一个更好的方式来写这篇文章,因为我还有 52 列要读完你可以想象这是一个白人-space-hog!

谢谢, 亚当

table的设计很差。几年后,它将有数百个列。如果无法更改 table 设计,处理此问题的唯一方法是使用动态 sql 和 exec。

合理且可维护的方法是更改​​ table 设计,使每个项目编号、周编号和项目数量各占一行。然后您可以使用标准的 TSQL 动词,例如 sum 和 group by。