现有一字典表,
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,缺省值)】貌似查出来的不是我想要的结果,请各位高手指教。我现有积分不多,请大家帮帮忙
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 sss …… 新生成 处理中
2 aaa …… 处理中 处理中
select id,
name,
decode(typecode1,1,'新生成',2,'处理中',null),
decode(typecode2,1,'新生成',2,'处理中',null)
from 信息表
不能使用
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
吗?
另外
1 1001 状态1 1 新生成
3 1002 状态2 1 开始上面是信息表的内容,两条记录里都是 code = 1 ,但 value 不同。
所以说,楼主想要的结果,和数据无法匹配,干脆自己指定值好了。或者说,楼主没把要求说清楚。
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直接关联了
请具体解释一下可以么?没怎么写过sql语句。谢谢