我正在尝试制作一个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
中返回零。如果不是,那么它应该继续显示 3QOHQTY
.
我一直希望在临时表中同时使用IF
语句,但我试图避免这种情况。同样,我发现了一个可能有效的WHERE
CASE 语句,例如下面的示例。
SELECT '1'
FROM EDI846OutboundDetail WITH (NOLOCK)
WHERE CASE WHEN SAFETYSTOCKQTY > 1 THEN '1'
END
and PARTNERID = '987654321'
AND itemno = '123465'
但是,我在如何格式化该代码方面遇到了麻烦。
由于
SAFETYSTOCKQTY
大于3
,那么选择应该在QOHQTY
中返回零。如果不是,那么它应该继续显示 3 inQOHQTY
.
使用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所评论的那样,您想将safetystockqty
与qohqty
的值进行比较?然后:
SELECT
itemno,
CASE WHEN safetystockqty > qohqty THEN 0 ELSE qohqty END qohqty,
safetystockqty
FROM EDI846OutboundDetail WITH (NOLOCK)
WHERE partnerid = '987654321' AND itemno = '123465'`