select
decode(A_TYPE_ID,1,'A类型1',2,'A类型2'),
decode(B_TYPE_ID,1,'B类型1',2,'B类型2'),
decode(C_TYPE_ID,1,'C类型1',2,'C类型2')
from table_d
decode(A_TYPE_ID,1,'A类型1',2,'A类型2'),
decode(B_TYPE_ID,1,'B类型1',2,'B类型2'),
decode(C_TYPE_ID,1,'C类型1',2,'C类型2')
from table_d
解决方案 »
- 请教一个增长率的SQL,谢谢
- 表插入数据问题。
- 关于oracle的执行计划的输出的问题,请高手执教,好像很难(星期六还上班)
- oracle9i 在redhat7.3数据服务器的死掉
- Oracle 通过sql语句实现按照数值区间分组统计求和
- 求救:oracle 中建立快照(实例华视图)的问题
- 急急非常急。解决就结分,不不够再加
- 请问analyze 命令分析表的分析结果在哪里看?
- oracle 8.1.7中存储过程碰到的问题:while exits( 编译不过,高手赐教!
- Oracle8.1.6 internal的初始口令是什么?在线等候
- 在线瞪大眼急等!!! ORACLE连接问题
- 如何将表和字段的注释输出?
where d.A_TYPE_ID=a.type_id(+) and d.B_TYPE_ID=b.type_id(+) and d.C_TYPE_ID=c.type_id(+);
--改成下面的句子select d.SER_ID,a.type_name A_TYPE_NAME,b.type_name B_TYPE_NAME,c.type_name C_TYPE_NAME from 表D d,表A a,表B b,表C c
where d.A_TYPE_ID=a.type_id(+) and d.B_TYPE_ID=b.type_id(+) and d.C_TYPE_ID=c.type_id(+);
nvl(t1.name,'') A_TYPE_NAME,
nvl(t2.name,'') B_TYPE_NAME,
nvl(t3.name,'') C_TYPE_NAME
from d,
(select name from a,d where d.A_TYPE_ID=a.type_id) t1,
(select name from b,d where d.A_TYPE_ID=b.type_id) t2,
(select name from c,d where d.A_TYPE_ID=c.type_id) t3
你给的那个显然不行啊,B的为NULL,
and d.B_TYPE_ID=b.type_id这一句已经把
那个Where给否定了啊.我想要的结果 明白说就是:
那几个type的type_ID有可能为空,也有可能不空,
如果为空,选出来的name也就为空,但是如果其他的
type不是空,那么一定要把他选出来.现在只有 CodeMagic(ErrorDetector)
的可以选出正确结果来.可是我就是担心万一表很大,decode的代码看起来自己都不舒服啊现在试了试
create table 表B (type_id int, type_name varchar2(100));
create table 表C (type_id int, type_name varchar2(100));
create table 表D (SER_ID INT,A_TYPE_ID INT,B_TYPE_ID INT,C_TYPE_ID INT);insert into 表A select 1,'A类型1' from dual union select 2,'A类型2' from dual;
insert into 表B select 1,'B类型1' from dual union select 2,'B类型2' from dual;
insert into 表C select 1,'C类型1' from dual union select 2,'C类型2' from dual;
insert into 表d select 1,1,null,1 from dual;SQL> select d.SER_ID,a.type_name A_TYPE_NAME,b.type_name B_TYPE_NAME,c.type_name C_TYPE_NAME from 表
D d,表A a,表B b,表C c
2 where d.A_TYPE_ID=a.type_id(+) and d.B_TYPE_ID=b.type_id(+) and d.C_TYPE_ID=c.type_id(+); SER_ID A_TYPE_NAME B_TYPE_NAME C_TYPE_NAME
--------- --------------- --------------- ---------------
1 A类型1 C类型1这得到的不是楼主要的结果吗???
select ser_id,
nvl((select TYPE_NAME from A_TYPE where TYPE_ID=d.A_TYPE_ID),'') A_TYPE_NAME,
nvl((select TYPE_NAME from B_TYPE where TYPE_ID=d.B_TYPE_ID),'') B_TYPE_NAME,
nvl((select TYPE_NAME from C_TYPE where TYPE_ID=d.C_TYPE_ID),'') C_TYPE_NAME
from D希望大家点评
你给的那个显然不行啊,B的为NULL,
and d.B_TYPE_ID=b.type_id这一句已经把
那个Where给否定了啊.
ORARichard(没钱的日子好难过啊):
的应该没错
你没看到后面还有一个(+) 啊
你的数据库是什么类型的??