我在where子句中的最后一条CASE语句上遇到编译器错误。我似乎不知道我在做什么,wrong...any帮助会很感谢你。
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
发布于 2012-05-10 01:03:30
不能在if语句中嵌套case语句。考虑一下,重写查询。
末尾缺少case。你的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); 发布于 2012-05-10 01:01:17
不要认为你可以在这个方法中使用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
ENDhttps://stackoverflow.com/questions/10520636
复制相似问题