现有一字典表,
id    type_id     type  code   value
1      1001       状态1   1     新生成
2      1001       状态1   2     处理中
3      1002       状态2   1     开始
4      1002       状态2   2     处理中
5      1003       类型1   1     a
……
有一信息表
id    name   ……   typecode1   typecode2
1     sss    ……     1            2
2     aaa    ……     2            2
……我想知道如何查询name=aaa的所有信息,使用decode()如何将code转换成value显示。网上查找的decode()使用方法【decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)】貌似查出来的不是我想要的结果,请各位高手指教。我现有积分不多,请大家帮帮忙

解决方案 »

  1.   

    我需要查询出来显示为
    1   sss   ……   新生成    处理中
    2   aaa   ……   处理中    处理中
      

  2.   


    select id,
           name,
           decode(typecode1,1,'新生成',2,'处理中',null),
           decode(typecode2,1,'新生成',2,'处理中',null)
    from 信息表
      

  3.   


    不能使用
    select t.id,t.name,decode(t.typecode1,a.code,a.value,null),
    decode(t.typecode2,a.code,a.value,null) from 信息表 t,字典表 a
     where t.typecode1=a.code and t.typecode2=a.code
    吗?
    另外
      

  4.   

    这两张表根本没法关联嘛id type_id type code value
    1 1001 状态1 1 新生成
    3 1002 状态2 1 开始上面是信息表的内容,两条记录里都是 code = 1 ,但 value 不同。
    所以说,楼主想要的结果,和数据无法匹配,干脆自己指定值好了。或者说,楼主没把要求说清楚。
      

  5.   


    with tab as
    (select 1 id, 1001 type_id, '状1' type, 1 code, '新生成' value from dual union all
    select 2,1001,'状1',2,'処理中' from dual union all
    select 3,1002,'状2',1,'開始' from dual union all
    select 4,1002,'状2',2,'処理中' from dual union all
    select 5,1003,'型1',1,'a' from dual)
    , tab2 as(select 1 id, 'sss' name, 1 typecode1, 2 typecode2 from dual union all
    select 2,'aaa',2,2 from dual)select t2.id,t2.name, decode(t2.typecode1, t.code,t.value,'') typevalue1, 
    decode(t2.typecode2, t.code,t.value,'') typevalue2 
    from tab2 t2, tab t where t2.id = t.id
    --------------------------------------------------
    ID    NAME     typevalue1  typevalue2
    1 sss 新生成
    2 aaa 処理中 処理中
    --ps:根据楼主的意思,是想动态的取得typecode对应的value的值,但是楼主又没有给出这两个表的关联条件
    --所以我就用id直接关联了
      

  6.   

    如果两张表的数据量非常大,decode的的效率是很低的,建议楼主直接用两表关联查询。
      

  7.   


    请具体解释一下可以么?没怎么写过sql语句。谢谢