oracle的decode函数可以对两个字段进行操作吗 
有个表的字段,现在分组, 当flag为空或者false时为一组,当为true的时候要看id是否相同,不同则分成不同的组
id  flag
1   true
2   false
3   true
4   ""
5   ""select .. from users decode(flag,'false','1','null','1',2)这个满足不了需求,有啥好办法吗,请指点下,谢谢!

解决方案 »

  1.   

    select .. from users group by decode(nvl(flag,'false'),'false','1')
      

  2.   

    select .. from users group by decode(nvl(flag,'false'),'false',-1,id)
      

  3.   

    select .. from users group by decode(nvl(flag,'false'),'false',-1,id)
    顶!
      

  4.   

    with temp 
    as
    (
    select 1 id,'true' flag from dual
    union all
    select 2,'false' from dual
    union all
    select 3,'true' from dual
    union all
    select 4,'' from dual
    union all
    select 5,'' from dual
    )
    select id,flag ,decode(nvl(flag,'false'),'false',-1,id) from temp group by decode(nvl(flag,'false'),'false',-1,id),id,flag
    --result:
    1 true 1
    3 true 3
    2 false -1
    4 -1
    5 -1
      

  5.   

    是字段名,oracle里面还是报错,无效参数
      

  6.   

    with users as (select 1 id,'true' flag from dual
      union all select 2,'false' from dual
      union all select 3,'false' from dual
      union all select 4,'true' from dual
      union all select 5,null from dual
      union all select 1,'true' from dual)
      
    select decode(nvl(flag,'false'),'false',-1,id),
      count(1) from users group by decode(nvl(flag,'false'),'false',-1,id)没问题啊。你把你出错的语句,和表结构贴出来看看