【发布时间】:2018-12-04 13:46:33
【问题描述】:
下面是我的数据
WH_QTY 是可用的总数量,VIP,A,B,C 是优先级。例如,应首先将产品分配给 VIP FIRST,然后再分配给 A、B、C。
通过使用 case 语句,我已经能够获得 VIP_Avail、A_Avail 的正确值,但在转到 B_Avail 时,我收到了以下错误。 "case 表达式只能嵌套到第 10 级"
我正在寻找的只是使用 VIP_Avail 计算列作为我的 A_Avail 计算的基础等等。但由于我引用了整个案例陈述,所以它被关闭了。
下面是 VIP_Avail 的查询
IIF(ORDER_ITEMS.WH_OH =0,0,IIF(ORDER_ITEMS.WH_OH>=ORDER_AVAILABLE.VIP,ORDER_AVAILABLE.VIP,IIF(ORDER_ITEMS.WH_OH<ORDER_AVAILABLE.VIP,ORDER_ITEMS.WH_OH,0))) AS VIP_AVAIL
下面是 A_Avail 的查询
CASE
WHEN
ORDER_ITEMS.WH_OH = 0 THEN 0
-- WHEN (WH_QTY-VIP)<A AND WH> 0 THEN (WH-VIP)
WHEN
((ORDER_ITEMS.WH_OH-IIF(ORDER_ITEMS.WH_OH =0,0,IIF(ORDER_ITEMS.WH_OH>=ORDER_AVAILABLE.VIP,ORDER_AVAILABLE.VIP,IIF(ORDER_ITEMS.WH_OH<ORDER_AVAILABLE.VIP,ORDER_ITEMS.WH_OH,0))))<A AND ORDER_ITEMS.WH_OH>0) THEN (ORDER_ITEMS.WH_OH-IIF(ORDER_ITEMS.WH_OH =0,0,IIF(ORDER_ITEMS.WH_OH>=ORDER_AVAILABLE.VIP,ORDER_AVAILABLE.VIP,IIF(ORDER_ITEMS.WH_OH<ORDER_AVAILABLE.VIP,ORDER_ITEMS.WH_OH,0))))
-- WHEN (WH_QTY - VIP) >= A THEN A
WHEN
(ORDER_ITEMS.WH_OH-IIF(ORDER_ITEMS.WH_OH =0,0,IIF(ORDER_ITEMS.WH_OH>=ORDER_AVAILABLE.VIP,ORDER_AVAILABLE.VIP,IIF(ORDER_ITEMS.WH_OH<ORDER_AVAILABLE.VIP,ORDER_ITEMS.WH_OH,0))))>=ORDER_AVAILABLE.A THEN ORDER_AVAILABLE.A
END AS A_AVAIL
谢谢, 陈
【问题讨论】:
-
IIF 是一种不同的写法 CASE...WHEN...ELSE END 您是否尝试过其他方法,例如制作一个标量函数返回位,其中包含程序样式 IF ELSE 逻辑?跨度>
-
我尝试过 IF else 登录但得到了相同的结果。我是初学者
-
你能用文字而不是代码来解释你的情况吗?很难理解你想要什么,有些条件会重复更多次,例如 ORDER_ITEMS.WH_OH = 0 已经作为第一种情况提到,那为什么还要重复呢?它已被排除,因为您将其用作第一个条件
-
如果 STK 有 10 并且 VIP 订单是 5 VIP_Available 应该是 5,如果 A 是 10 那么 A_Available 应该是 5,因为 5 已经分配给 VIP。 VIP 端有 3 到 4 个条件需要满足,同样适用于 A_Available。因为它以 VIP_Available 为基础。
标签: sql sql-server nested case iif