求Oracle的一条 SQL (case 还是 decode 之类的?) 大致 如下name       type        c_date
aa           1         2011-11-11
bb           2         2000-01-01
cc           3         2010-10-10 
   
  查询   type为2  时,c_data 是 5年前 其余c_date 是 2年前的 name..
   SQL 菜鸟 求高手指教

解决方案 »

  1.   

    不懂lz的意思.
    不过decode函数用法比较简单
    select decode(type,2,'五年前','两年前') type from table1
      

  2.   

       我不能编辑帖子了 就这样回复把
       咳咳,, 我表述不清吧。。
        就是分类,分条件查询。。
        得到 type 为 2 并且 c_data 为 为 5 年前( c_data < add_months(sysdate,-60)) 的name
      以及 type 不为 2 时   c_data 为 为 3 年前( c_data < add_months(sysdate,-36)) 的name
      这 应该清楚点了吧 ???
         
      

  3.   


      我不能编辑帖子了 就这样回复把
       咳咳,, 我表述不清吧。。
        就是分类,分条件查询。。
        得到 type 为 2 并且 c_data 为 为 5 年前( c_data < add_months(sysdate,-60)) 的name
      以及 type 不为 2 时   c_data 为 为 3 年前( c_data < add_months(sysdate,-36)) 的name
      这 应该清楚点了吧 ???
         
      

  4.   


      我不能编辑帖子了 就这样回复把
       咳咳,, 我表述不清吧。。
        就是分类,分条件查询。。
        得到 type 为 2 并且 c_data 为 为 5 年前( c_data < add_months(sysdate,-60)) 的name
      以及 type 不为 2 时   c_data 为 为 3 年前( c_data < add_months(sysdate,-36)) 的name
      这 应该清楚点了吧 ???
         
      

  5.   

    当然OK了,你把时间做为条件下!where (case when type=2 then c_data < add_months(sysdate,-60)
               else c_data < add_months(sysdate,-36) end)
      

  6.   

    where (case when type=2 then c_data < add_months(sysdate,-60)
               else c_data < add_months(sysdate,-36) end)
      

  7.   

      谢谢 你的指点。。 提供了思路。。
       已经出来了。 
      不过,你那个有点问题 where c_data<(case when type=2 then   add_months(sysdate,-60)
               else add_months(sysdate,-36) end)要把 date 放在外面才行。。