本帖最后由 kkjunejuly 于 2010-11-03 10:58:50 编辑

解决方案 »

  1.   

    select i.id ,case i.province when null then null when '请选择' then null else s.chi_nam end   
    from et.et_user_info i  
    left join et.state s on s.id=case i.province when '请选择' then null else i.province end   
      

  2.   

    试试下面的SQL,偶没测试SELECT case i.province
             when null then
              null
             when '请选择' then
              null
             else
              s.chi_nam
           end
      FROM et.et_user_info i, et.state s
     where i.province = s.id(+)
      

  3.   

    ORACLE报无效数字错误,说明你的sql中存在varchar2类型像int类型的隐式转换。
    看你的sql中唯一可能存在转换的就是left join et.state s on s.id=i.province  这一句了
    那么,可以想象,你的et.state应该是integer类型,而i.province为字符类型
      

  4.   

    with et_user_info AS(
    SELECT '张三' username,'01' id FROM dual 
    UNION ALL
    SELECT '李四','02' FROM dual 
    UNION ALL
    SELECT '王五','请选择' FROM dual
    ),
    state AS(
    SELECT '01' province,'北京' chi_nam,'Beijin' eng_nam FROM dual 
    UNION ALL
    SELECT '02','上海','Shanghai' FROM dual
    )
    select i.username,i.id ,Nvl(s.chi_nam ,null ) chi_nam  
    from et_user_info i  
    left join state s on s.province=i.id  USERNAME  ID       CHI_NAM
    --------------------------------
    张三      01        北京
    李四      02        上海
    王五      请选择     
      

  5.   


    select i.id ,
    (case when '请选择' then null else s.chi_nam end)  
    from et.et_user_info i  
    left join et.state s on s.id=i.province  
      

  6.   


    大侠分析的完全正确,但是应该怎么解决这个问题呢,我现在不可能再去改变字段的类型了
    1、2、4楼的SQL还是报同样的错误,5楼的语句本身就有问题,谢谢各位解答,继续等待大侠帮忙,我自己也再想想!
      

  7.   

    --你把state et_user_info 这两个表的表结构贴出来
    --state 这个表的id和et_user_info里面的数据的是一样的不
    select i.id ,
    (case when i.province='请选择' then null else s.chi_nam end)  
    from et.et_user_info i  
    left join et.state s on s.id=i.province  
      

  8.   

    case 语法没错 报无效数字 那就是连接条件的字段类型不一的问题  
    select i.id ,case i.province when null then null when '请选择' then null else s.chi_nam end   
    from et.et_user_info i  
    left join et.state s on s.id=i.province   
    id 什么类型 是字符还是number
    province 什么类型的
    on s.id=i.province  加个to_number  或者to_char
      

  9.   

    很显然你这个是因为province字段的值可以是“请选择”这样的字符,所以你可以case ‘请选择’ 然后给一个值,0或者其他的无意义的值就可以,然后就可以用 s.id=i.province 连接了
      

  10.   


    state 表里的ID是number类型,et_user_info表里的province是VARCHAR2类型,这两个字段相关联
      

  11.   

    --这样试试
    select i.id ,
    (case when i.province='请选择' then null 
     when i.province is null then null
     else s.chi_nam end)  
    from et.et_user_info i  
    left join et.state s on to_char(s.id)=i.province  
      

  12.   

    select i.id ,case i.province when null then null when '请选择' then null else s.chi_nam end   
    from et.et_user_info i   
    left join et.state s on s.id=to_number(i.province)   --orselect i.id ,decode(i.province,null,null,'请选择',null,s.chi_nam)
    from et.et_user_info i   
    left join et.state s on s.id=to_number(i.province) 
      

  13.   

    楼主,你可以换个方法解决:
    你把province字段的表做一个子查询,然后把“请选择”case成别的能转换成数值的值就行了,然后用子查询出来的表和你的主表做关联就可以了~~