Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Case嵌套Case语句_Sql_Oracle - Fatal编程技术网

Sql Case嵌套Case语句

Sql Case嵌套Case语句,sql,oracle,Sql,Oracle,您好,我在向嵌套case语句添加另一组条件时遇到问题。我尝试了几种方式重新格式化语句,并将“END”放在不同的位置,但我似乎无法通过ORA-00909:无效参数数错误。 我想我只需要每个案例有一个结束,结束需要在其他结束之前结束。这不对吗?如果我把最后一个条件注释掉,它就可以正常工作了 根据下面的评论,我试图理顺我的代码并设置正确的else和end语句,但仍然得到相同的错误。基本上应该有5组条件 CASE WHEN IND0.M_COM_FUT <>0 AND IN

您好,我在向嵌套case语句添加另一组条件时遇到问题。我尝试了几种方式重新格式化语句,并将“END”放在不同的位置,但我似乎无法通过ORA-00909:无效参数数错误。 我想我只需要每个案例有一个结束,结束需要在其他结束之前结束。这不对吗?如果我把最后一个条件注释掉,它就可以正常工作了

根据下面的评论,我试图理顺我的代码并设置正确的else和end语句,但仍然得到相同的错误。基本上应该有5组条件

    CASE 
    WHEN IND0.M_COM_FUT <>0 AND IND0.M_COM_FUT = IND5.M_COM_IND 
    THEN 
        CASE    WHEN IND5.M_COM_IND = CMIND5.M_REFERENCE 
                THEN
                    CASE    WHEN CMIND5.M_PHYSICAL = PHYS5.M_REFERENCE 
                            THEN PHYS5.M_LABEL 
                    END 
        END 
    ELSE
        CASE    WHEN   IND0.M_UNDRL = IND3.M_INDEX AND IND3.M_IND_LAB LIKE '%NBY%' AND IND3.M_COM_NBY_T = 2 
                THEN
                    CASE    WHEN  IND3.M_COM_FUT = IND6.M_COM_IND 
                            THEN 
                                CASE    WHEN IND6.M_COM_IND = CMIND6.M_REFERENCE 
                                        THEN
                                            CASE    WHEN CMIND6.M_PHYSICAL = PHYS6.M_REFERENCE 
                                                    THEN PHYS6.M_LABEL 
                                            END 
                                END 
                    END
          END          
       ELSE
            CASE    WHEN IND0.M_UNDRL = IND3.M_INDEX 
                    THEN
                        CASE    WHEN IND3.M_COM_IND = CMIND3.M_REFERENCE 
                                THEN
                                    CASE    WHEN CMIND3.M_PHYSICAL = PHYS3.M_REFERENCE 
                                            THEN PHYS3.M_LABEL 
                                    END 
                        END                         
            END
        ELSE
            CASE    WHEN   IND0.M_UNDRL = IND3.M_INDEX AND IND3.M_IND_LAB LIKE '%NBY%' AND IND3.M_COM_NBY_T = 0 
                    THEN 
                        CASE    WHEN  IND3.M_COM_FUT = FUT.M_REFERENCE 
                                THEN 
                                    CASE    WHEN FUT.M_QUOT_FWD= QUOT.M_REFERENCE 
                                            THEN
                                                CASE    WHEN QUOT.M_INDEX = IND0.M_INDEX 
                                                        THEN PHYS0.M_LABEL 
                                                END 
                                    END 
                        END 
            END 
         ELSE
            CASE    WHEN IND0.M_IND_LAB= IND0.M_IND_LAB 
                    THEN PHYS0.M_LABEL
            END 

END AS PRODUCT,
案例
当IND0.M_COM_FUT 0和IND0.M_COM_FUT=IND5.M_COM_IND
然后
IND5.M\u COM\u IND=CMIND5.M\u参考时的情况
然后
CMIND5.M_物理=PHYS5.M_参考时的情况
然后是PHYS5.M_标签
结束
结束
其他的
当IND0.M_UNDRL=IND3.M_索引和IND3.M_IND_实验室如“%NBY%”和IND3.M_COM_NBY\u T=2时的情况
然后
IND3.M_COM_FUT=IND6.M_COM_IND时的情况
然后
IND6.M\u COM\u IND=CMIND6.M\u参考时的情况
然后
CMIND6.M_物理=PHYS6.M_参考时的情况
然后是PHYS6.M_标签
结束
结束
结束
结束
其他的
IND0.M_UNDRL=IND3.M_索引时的情况
然后
IND3.M_COM_IND=CMIND3.M_参考时的情况
然后
当CMIND3.M_物理=PHYS3.M_参考时的情况
然后是PHYS3.M_标签
结束
结束
结束
其他的
当IND0.M_UNDRL=IND3.M_索引和IND3.M_IND_实验室如“%NBY%”和IND3.M_COM_NBY=0时的情况
然后
IND3.M_COM_FUT=FUT.M_参考时的情况
然后
当FUT.M“u QUOT”FWD=QUOT.M”参考时的情况
然后
当QUOT.M_索引=IND0.M_索引时的情况
然后是PHYS0.M_标签
结束
结束
结束
结束
其他的
IND0.M_IND_LAB=IND0.M_IND_LAB时的情况
然后是PHYS0.M_标签
结束
最终产品,

如果您的代码格式更好,您应该会发现它有重复的
else
,并且遗漏了一些
end

CASE 
    WHEN IND0.M_COM_FUT <>0 AND IND0.M_COM_FUT = IND5.M_COM_IND 
    THEN 
        CASE    WHEN IND5.M_COM_IND = CMIND5.M_REFERENCE 
                THEN
                    CASE    WHEN CMIND5.M_PHYSICAL = PHYS5.M_REFERENCE 
                            THEN PHYS5.M_LABEL 
                    END 
        END 
    ELSE
        CASE    WHEN   IND0.M_UNDRL = IND3.M_INDEX AND IND3.M_IND_LAB LIKE '%NBY%' AND IND3.M_COM_NBY_T = 2 
                THEN
                    CASE    WHEN  IND3.M_COM_FUT = IND6.M_COM_IND 
                            THEN 
                                CASE    WHEN IND6.M_COM_IND = CMIND6.M_REFERENCE 
                                        THEN
                                            CASE    WHEN CMIND6.M_PHYSICAL = PHYS6.M_REFERENCE 
                                                    THEN PHYS6.M_LABEL 
                                            END 
                                END 
                    END 
                ELSE
                    CASE    WHEN IND0.M_UNDRL = IND3.M_INDEX 
                            THEN
                                CASE    WHEN IND3.M_COM_IND = CMIND3.M_REFERENCE 
                                        THEN
                                            CASE    WHEN CMIND3.M_PHYSICAL = PHYS3.M_REFERENCE 
                                                    THEN PHYS3.M_LABEL 
                                            END 
                                END 
                            ELSE
                                CASE    WHEN IND0.M_IND_LAB= IND0.M_IND_LAB 
                                        THEN PHYS0.M_LABEL
                                END 
                            END 
                    END
                ELSE
                    CASE    WHEN   IND0.M_UNDRL = IND3.M_INDEX AND IND3.M_IND_LAB LIKE '%NBY%' AND IND3.M_COM_NBY_T = 0 
                            THEN 
                                CASE    WHEN  IND3.M_COM_FUT = FUT.M_REFERENCE 
                                        THEN 
                                            CASE    WHEN FUT.M_QUOT_FWD= QUOT.M_REFERENCE 
                                                    THEN
                                                        CASE    WHEN QUOT.M_INDEX = IND0.M_INDEX 
                                                                THEN PHYS0.M_LABEL 
                                                        END 
                                            END 
                                END 
                    END 
END AS PRODUCT,
案例
当IND0.M_COM_FUT 0和IND0.M_COM_FUT=IND5.M_COM_IND
然后
IND5.M\u COM\u IND=CMIND5.M\u参考时的情况
然后
CMIND5.M_物理=PHYS5.M_参考时的情况
然后是PHYS5.M_标签
结束
结束
其他的
当IND0.M_UNDRL=IND3.M_索引和IND3.M_IND_实验室如“%NBY%”和IND3.M_COM_NBY\u T=2时的情况
然后
IND3.M_COM_FUT=IND6.M_COM_IND时的情况
然后
IND6.M\u COM\u IND=CMIND6.M\u参考时的情况
然后
CMIND6.M_物理=PHYS6.M_参考时的情况
然后是PHYS6.M_标签
结束
结束
结束
其他的
IND0.M_UNDRL=IND3.M_索引时的情况
然后
IND3.M_COM_IND=CMIND3.M_参考时的情况
然后
当CMIND3.M_物理=PHYS3.M_参考时的情况
然后是PHYS3.M_标签
结束
结束
其他的
IND0.M_IND_LAB=IND0.M_IND_LAB时的情况
然后是PHYS0.M_标签
结束
结束
结束
其他的
当IND0.M_UNDRL=IND3.M_索引和IND3.M_IND_实验室如“%NBY%”和IND3.M_COM_NBY=0时的情况
然后
IND3.M_COM_FUT=FUT.M_参考时的情况
然后
当FUT.M“u QUOT”FWD=QUOT.M”参考时的情况
然后
当QUOT.M_索引=IND0.M_索引时的情况
然后是PHYS0.M_标签
结束
结束
结束
结束
最终产品,

试着从这里开始。我不确定这里的逻辑是什么,但至少应该运行它,并根据代码给出我认为您需要的结果

CASE
  WHEN IND0.M_COM_FUT <> 0
   AND IND0.M_COM_FUT = IND5.M_COM_IND
   AND IND5.M_COM_IND = CMIND5.M_REFERENCE
   AND CMIND5.M_PHYSICAL = PHYS5.M_REFERENCE
    THEN PHYS5.M_LABEL  
  WHEN IND0.M_UNDRL = IND3.M_INDEX
   AND IND3.M_IND_LAB LIKE '%NBY%'
   AND IND3.M_COM_NBY_T = 2
   AND IND3.M_COM_FUT = IND6.M_COM_IND
   AND IND6.M_COM_IND = CMIND6.M_REFERENCETHEN
   AND CMIND6.M_PHYSICAL = PHYS6.M_REFERENCE
    THEN PHYS6.M_LABEL 
  WHEN IND0.M_UNDRL = IND3.M_INDEX
   AND IND3.M_COM_IND = CMIND3.M_REFERENCE
   AND CMIND3.M_PHYSICAL = PHYS3.M_REFERENCE
    THEN PHYS3.M_LABEL 
  WHEN IND0.M_UNDRL = IND3.M_INDEX
   AND IND3.M_IND_LAB LIKE '%NBY%'
   AND IND3.M_COM_NBY_T = 0 
   AND IND3.M_COM_FUT = FUT.M_REFERENCE
   AND FUT.M_QUOT_FWD= QUOT.M_REFERENCE
   AND QUOT.M_INDEX = IND0.M_INDEX
    THEN PHYS0.M_LABEL 
  WHEN IND0.M_IND_LAB= IND0.M_IND_LAB
    THEN PHYS0.M_LABEL
END
案例
当IND0.M_COM_FUT 0
而IND0.M_COM_FUT=IND5.M_COM_IND
和IND5.M_COM_IND=CMIND5.M_参考
和CMIND5.M_物理=PHYS5.M_参考