我正在尝试修改现有代码,以便在2种情况属实时选择CASE结果。业务规则已经改变,因此下面的代码可以工作,它刚刚变得不完整。
下面是一个实际代码片段,用于测试特定发票中的任何订单项是否具有“CCC-OUT”的ITMCLSCD。规则已更改,因此现在,所有订单项都需要具有“CCC-OUT”的ITMSLSCD。
所以现在我需要测试“CCC-OUT”的存在以及行项目集中是否缺少任何其他ITMSLSCD。
有人能指出我正确的方向吗?
由于
SELECT DISTINCT
OH.SOPNUMBE HSOPMNBR,
OH.INVODATE INVODATE,
OH.ORIGNUMB ORIGNUM,
OH.CUSTNMBR CUSTOMER,
CASE WHEN 'CCC-OUT' IN (SELECT LEFT(IV.ITMCLSCD,7)
FROM IV00101
INNER JOIN SOP10200 OL ON OH.SOPNUMBE = OL.SOPNUMBE
WHERE OH.SOPTYPE = 3
AND OH.PSTGSTUS = 0
AND OH.VOIDSTTS = 0
AND OH.BACHNUMB <>'DO NOT POST')
THEN 'THIRD PARTY SERVICES'
ELSE 'COMPANY SERVICES'
END TRANSTYPE,
UD.USRTAB09
FROM SOP10100 OH
INNER JOIN SOP10200 OL ON OH.SOPNUMBE = OL.SOPNUMBE
INNER JOIN IV00101 IV ON OL.ITEMNMBR = IV.ITEMNMBR
INNER JOIN SOP10106 UD ON OH.SOPNUMBE = UD.SOPNUMBE
WHERE OH.SOPTYPE=3
AND OH.PSTGSTUS = 0
AND OH.VOIDSTTS = 0
AND OH.BACHNUMB <>'DO NOT POST'
答案 0 :(得分:0)
到目前为止,您至少需要一个LEFT(IV.ITMCLSCD,7) = 'CCC-OUT'
。现在您希望至少有一个LEFT(IV.ITMCLSCD,7) = 'CCC-OUT'
加上LEFT(IV.ITMCLSCD,7) <> 'CCC-OUT'
。
换句话说,无论您是查看最小值还是最大值,都是'CCC-OUT'
,因为所有值都是'CCC-OUT'
: - )
写这个的一种方法:
WHEN 'CCC-OUT' =
(
SELECT
CASE WHEN MIN(LEFT(IV.ITMCLSCD,7)) = MAX(LEFT(IV.ITMCLSCD,7))
THEN MIN(LEFT(IV.ITMCLSCD,7))
ELSE 'MISMATCH'
END
FROM IV00101
INNER JOIN SOP10200 OL ON OH.SOPNUMBE = OL.SOPNUMBE
WHERE OH.SOPTYPE = 3 --Invoice
AND OH.PSTGSTUS = 0 --Unposted
AND OH.VOIDSTTS = 0 --Not Voided
AND OH.BACHNUMB <>'DO NOT POST'
)
THEN '3PARTY SERVICES'
(您甚至可以删除ELSE
分支;默认为NULL
,它的工作方式相同。)