我现在有个数据表,网页上可选定义{ed_xmzt}的值 可以自己输入成中文 比如为(完成)、(未完成)、(全部)三个条件可选。在数据库中函数ord_status的值可能是 (填写完毕)、(待审核)、(审核中)、(审核完成)、(变更完成)。我想要做到以{ed_xmzt}来做判断查询。
当{ed_xmzt}为(全部)时,查询ord_status的值为任意的所有数据。
当{ed_xmzt}为(未完成)时,查询ord_status的值为 (填写完毕)、(待审核)、(审核中) 的所有数据。
当{ed_xmzt}为(完成)时,查询ord_status的值为 ( 审核完成 ) 的所有数据。
 
但是我的写法如下,报错,大大们指教下。谢过(case when {ed_xmzt}='完成' then ord_status=' 审核完成 ' or ord_status=' 变更完成 ' when {ed_xmzt}='未完成' then ord_status<>' 审核完成 ' and ord_status<>' 变更完成 ' else ord_status<>'全部' end)

解决方案 »

  1.   


    CASE  ord_status  WHEN '审核完成' THEN '完成'
    WHEN '填写完毕'  THEN '未完成',
    WHEN '待审核'  THEN '未完成',
    WHEN '审核中'  THEN '未完成',
    ELSE '全部' 
    END
      

  2.   

    大大 那{ed_xmzt}没有在这里面出现啊,我是通过网页定义的这个数据。在你的列子上没出现他。那怎么判断我在选择{ed_xmzt}的时候是用的那个数据呢。谢谢大大
      

  3.   


    大大 那{ed_xmzt}没有在这里面出现啊,我是通过网页定义的这个数据。在你的列子上没出现他。那怎么判断我在选择{ed_xmzt}的时候是用的那个数据呢。谢谢大大
      

  4.   


    大大 那{ed_xmzt}没有在这里面出现啊,我是通过网页定义的这个数据。在你的列子上没出现他。那怎么判断我在选择{ed_xmzt}的时候是用的那个数据呢。谢谢大大
    select .... from TB
    where {ed_xmzt} = CASE  ord_status  WHEN '审核完成' THEN '完成'
    WHEN '填写完毕'  THEN '未完成',
    WHEN '待审核'  THEN '未完成',
    WHEN '审核中'  THEN '未完成',
    ELSE '全部' 
    END放前面判断即可
      

  5.   

    用了大大地方法,结果基本对了,不知道怎么回事,我的数据库只支持 case when 两次判断,第三个设定判断不其效果,最后只能写成这样了 (('{ed_xmzt}' = case when ord_status='立项已完成' or ord_status='变更已完成' then '立项已完成(变更已完成)' 
     else '未知' end) or 
     ('{ed_xmzt}' = case when ord_status<>'立项已完成' and ord_status<>'变更已完成' then '立项未完成(变更未完成)' 
     else '未知' end) or 
     ('{ed_xmzt}' = case when ord_status<>'全部' then '全部' 
     else '未知' end))
      

  6.   


    大大 那{ed_xmzt}没有在这里面出现啊,我是通过网页定义的这个数据。在你的列子上没出现他。那怎么判断我在选择{ed_xmzt}的时候是用的那个数据呢。谢谢大大
    select .... from TB
    where {ed_xmzt} = CASE  ord_status  WHEN '审核完成' THEN '完成'
    WHEN '填写完毕'  THEN '未完成',
    WHEN '待审核'  THEN '未完成',
    WHEN '审核中'  THEN '未完成',
    ELSE '全部' 
    END放前面判断即可
    用了大大地方法,结果基本对了,不知道怎么回事,我的数据库只支持 case when 两次判断,第三个设定判断不其效果,最后只能写成这样了 (('{ed_xmzt}' = case when ord_status='立项已完成' or ord_status='变更已完成' then '立项已完成(变更已完成)' 
     else '未知' end) or 
     ('{ed_xmzt}' = case when ord_status<>'立项已完成' and ord_status<>'变更已完成' then '立项未完成(变更未完成)' 
     else '未知' end) or 
     ('{ed_xmzt}' = case when ord_status<>'全部' then '全部' 
     else '未知' end))
      

  7.   


    这样的
     ('{ed_xmzt}' = case when ord_status='立项已完成' or ord_status='变更已完成' then '立项已完成(变更已完成)' 
     when ord_status<>'立项已完成' or ord_status<>'变更已完成' then '立项未完成(变更未完成)' 
     when ord_status<>'全部' then '全部' 
     else '未知' end)上面的语句,第三个when不管放谁,都没有任何结果输出。
      

  8.   


    这样的
     ('{ed_xmzt}' = case when ord_status='立项已完成' or ord_status='变更已完成' then '立项已完成(变更已完成)' 
     when ord_status<>'立项已完成' and ord_status<>'变更已完成' then '立项未完成(变更未完成)' 
     when ord_status<>'全部' then '全部' 
     else '未知' end)上面的语句,第三个when不管放谁,都没有任何结果输出。
    有个地方OR写错了,应该是and
      

  9.   

    when ord_status<>'全部' 你这个是不是应该是=而不是<>啊?另外,假设是<>,那么不等也就标识前面两个when满足,所以你这个无效,这是逻辑问题
      

  10.   


    我的ord_status状态非常多,所以我用的ord_status最后一个状态来判定他是真或者假的状态。当{ed_xmzt}'=真的时候,ord_status也是真,当{ed_xmzt}'=假的时候,那么ord_status我就需要把他真的值给剔除掉,那么留下的就是其他N个假值,当我{ed_xmzt}'=未知的时候,我就需要不进行ord_status的判断,把ord_status值得说有数据罗列出来。
      

  11.   


    我的ord_status状态非常多,所以我用的ord_status最后一个状态来判定他是真或者假的状态。当{ed_xmzt}'=真的时候,ord_status也是真,当{ed_xmzt}'=假的时候,那么ord_status我就需要把他真的值给剔除掉,那么留下的就是其他N个假值,当我{ed_xmzt}'=未知的时候,我就需要不进行ord_status的判断,把ord_status值得说有数据罗列出来。其实最后的ord_status<>'全部'是欺骗系统,因为ord_status太多了,唯独没有=全部,所以我欺骗系统,只要不等于他,我就全部呈现。
    上面的三条when语言,顺序随便怎么放,唯独第三条不起效果。搞不懂了。这里感谢版大看我贴哦。
      

  12.   

    但是你不觉得你前两个case when已经完全包含了所有类型了吗?也就是后面两个when/else是失效的
      

  13.   

    那你只需要三次判断就可以拉,第三次就是else,没必要再加一个
      

  14.   

    嗯,我也试了,第三次else也不行,所以就搞不懂了。我是这样写的
     ('{ed_xmzt}' = case when ord_status='立项已完成' or ord_status='变更已完成' then '立项已完成(变更已完成)' 
     when ord_status<>'立项已完成' or ord_status<>'变更已完成' then '立项未完成(变更未完成)' 
     else '全部' end)
      

  15.   

    因为没有不符合前两条的,所以根本不会走else,你那个要求可能需要放到case when外面