一个Oracle下的SQL语句,求大神帮忙

有表A和表B,表A有字段type(number类型的)和date,trassn,表B有字段bill和status,trassn.A和B通过trassn联系起来.SQL语句要查询type,date,trassn,status,bill五个字段.当A的type=1时,B中要返回A中trassn对应的status和bill,当A中的type不为1时,B中的status返回为NULL,bill为0.0
A中有很多条记录,B中所有的记录只是A中的一部分,我要把A中所有记录都查出来.

第1个回答  2013-05-28
select type,date, a.trassn, decode(type,1,status, NULL) as status, decode(type,1,bill,0, 0.0, -1) as bill
from A, B
where a.trassn=b.trassn(+);
注意decode用法、status的是“非1则为NULL”和你描述的有区别,和后面一个比对就清楚了。
第2个回答  2013-05-28
select a.type,a.date,a.trassn, case when a.type='1' then a.status else null end as status,
case when a.type='1' then a.bill else '0.0' end as bill
from a, b where a.trassn=b.trassn追问

A中有很多记录,B中是没有的,我需要查询出A中的所有记录.你这样查询只能查询到B中所有的记录

追答

select a.type,a.date,a.trassn, case when a.type='1' then a.status else null end as status,
case when a.type='1' then a.bill else '0.0' end as bill from a left join b on (a.trassn=b.trassn)

第3个回答  2013-05-28
SELECT A.TYPE, A.DATE, A.TRASSN, B.BITT, B.STATUS FROM A LEFT OUTER JOIN B ON A.TRASSN = B.TRASSN WHERE (A.TYPE = 1)
UNION ALL
SELECT A.TYPE, A.DATE, A.TRASSN, 0 AS BILL, NULL AS STATUS FROM A LEFT OUTER JOIN B ON A.TRASSN = B.TRASSN WHERE (A.TYPE <> 1)
第4个回答  2013-05-28
select case when type=1 then status else '' end as status,case when type=1 then bill else 0.00 end as status from (select * from A left join B on a.trassn=b.trassn) 大概就这个思路你修改下
第5个回答  2013-05-28
用decode(a.type,1,b.status,null),decode(a.type,1,b.bill,0.0)
相似回答