首页 > 解决方案 > 根据大于子句更新 Select 中的值

问题描述

我正在尝试制作一个可以识别当前手头数量的 SQL 报告。除非应用规则,否则选择中列出的值将在表中显示给定值。

本质上,我需要有关如何编写 IF 语句的帮助。

SELECT itemno
    ,QOHQTY
    ,SAFETYSTOCKQTY
FROM EDI846OutboundDetail WITH (NOLOCK)
WHERE PARTNERID = '987654321'
    AND itemno = '123465'`

此选择将返回

itemno  QOHQTY      SAFETYSTOCKQTY
123465  3.00000000  12.00000000

但是,由于SAFETYSTOCKQTY大于 3,因此选择应在 中返回零QOHQTY。如果不是,那么它应该继续显示 3 in QOHQTY

我一直希望IF在临时表中同时使用这两个语句,但我试图避免这种情况。同样,我发现了一个WHERE可能有效的 CASE 语句,例如下面的这个例子

SELECT '1'
FROM EDI846OutboundDetail WITH (NOLOCK)
WHERE CASE WHEN SAFETYSTOCKQTY > 1 THEN '1'
END
    and PARTNERID = '987654321'
    AND itemno = '123465'

但是,我在如何格式化该代码时遇到了麻烦。

标签: sql

解决方案


由于SAFETYSTOCKQTY大于3,则选择应在 中返回零QOHQTY。如果不是,那么它应该继续显示 3 in QOHQTY

使用CASE

SELECT 
    itemno,
    CASE WHEN safetystockqty > 3 THEN 0 ELSE qohqty END qohqty,
    safetystockqty
FROM EDI846OutboundDetail WITH (NOLOCK)
WHERE partnerid = '987654321' AND itemno = '123465'`

或者,正如averey_larry所评论的那样,您想safetystockqtyqohqty? 然后:

SELECT 
    itemno,
    CASE WHEN safetystockqty > qohqty THEN 0 ELSE qohqty END qohqty,
    safetystockqty
FROM EDI846OutboundDetail WITH (NOLOCK)
WHERE partnerid = '987654321' AND itemno = '123465'`

推荐阅读