[英]Nesting a Case statement within an IF statement
我在where子句中的最后一個CASE語句上遇到編譯器錯誤。 我似乎無法弄清楚我在做什么錯...謝謝您的任何幫助。
P1: BEGIN
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT DISTINCT MPWBIPS.MIP_NO,
MPWBIPS.ITEM_NO,
MPWBIPS.MATL_PLNR_ID,
MPWBIPS.ITEM_OBS_STATUS,
MPWBMIT.EXCS_ITEM_COST_TOT,
MPWBMIP.TRGT_CHGOVR_DATE,
SLOTLOC.LOT_FROM_EFF_DATE,
FROM MPWBIPS MPWBIPS
INNER JOIN MPWBMIT MPWBMIT
ON MPWBMIT.MIP_NO = MPWBIPS.MIP_NO
AND MPWBMIT.ITEM_NO = MPWBIPS.ITEM_NO
INNER JOIN MPPLNR MPPLNR
ON MPWBIPS.MATL_PLNR_ID = MPPLNR.MATL_PLNR_ID
INNER JOIN MPWBMIP MPWBMIP
ON MPWBIPS.MIP_NO = MPWBMIP.MIP_NO
INNER JOIN SMPROJ_DPIMS SMPROJ
ON MPWBIPS.MIP_NO = SMPROJ.MIP_NO
INNER JOIN SLOTLOC_DPIMS SLOTLOC
ON SMPROJ.MFG_CHGOVR_PER = SLOTLOC.LOT
WHERE plannerID =
CASE WHEN mgrIndc = 'Y' THEN
MPPLNR.MGR_LID
WHEN suprvIndc = 'Y' THEN
MPPLNR.SPRVSR_LID
WHEN plannerID = '' THEN
''
ELSE
MPPLNR.MATL_PLNR_ID
END
AND CASE WHEN obsStatus = 'ACTION' THEN
MPWBIPS.ITEM_OBS_STATUS <> 'RESOLVED 99'
AND MPWBIPS.ITEM_OBS_STATUS <> 'EXCESS 90'
WHEN obsStatus = 'ALL' OR obsStatus = '' THEN
obsStatus = ''
ELSE
MPWBIPS.ITEM_OBS_STATUS = obsStatus
END
AND (COALESCE(mipNo, '') = '' OR MPWBIPS.MIP_NO = mipNo);
OPEN cursor1;
結束P1
不要以為您可以在此方法中使用if。 您可以嵌套箱子。
case when parm1 <> '' THEN
CASE parm1
WHEN '1' THEN
--do something
WHEN '2' THEN
--do something
ELSE
--do something
END
end
但為什么? 而是添加到您的案例
CASE parm1
WHEN '1' THEN
--do something
WHEN '2' THEN
--do something
WHEN <> ''
--do something
END
您不能將case
語句嵌套在if
語句中。 考慮一下,重寫您的查詢。
您最后缺少case
。 您的案例陳述應該是
CASE WHEN obsStatus = 'ACTION' THEN
MPWBIPS.ITEM_OBS_STATUS <> 'RESOLVED 99'
AND MPWBIPS.ITEM_OBS_STATUS <> 'EXCESS 90'
WHEN obsStatus = 'ALL' OR obsStatus = '' THEN
obsStatus = ''
ELSE
MPWBIPS.ITEM_OBS_STATUS = obsStatus
END CASE
編輯:
<>
(不相等)運算符正在產生問題; 您不能在那里使用它們。 不知道為什么要使用不等於大寫的情況。 在兩行以下
MPWBIPS.ITEM_OBS_STATUS <> 'RESOLVED 99'
AND MPWBIPS.ITEM_OBS_STATUS <> 'EXCESS 90'
可能會使您的Where條件如下所示:
WHERE plannerID =
(CASE WHEN mgrIndc = 'Y' THEN
MPPLNR.MGR_LID
WHEN suprvIndc = 'Y' THEN
MPPLNR.SPRVSR_LID
WHEN plannerID = '' THEN ''
ELSE MPPLNR.MATL_PLNR_ID
END)
AND
((obsStatus = 'ACTION') and (MPWBIPS.ITEM_OBS_STATUS <> 'RESOLVED 99'
AND MPWBIPS.ITEM_OBS_STATUS <> 'EXCESS 90'))
or
((obsStatus = 'ALL' OR obsStatus = '') and (obsStatus = ''))
or
MPWBIPS.ITEM_OBS_STATUS = obsStatus
AND
(COALESCE(mipNo, '') = '' OR MPWBIPS.MIP_NO = mipNo);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.