有两表:
表A:(日志)
no zy jh bh chr2 money num1 rq ye
999998 B null null 01010104 1000 0.25 2009-6-24 12:12:00 1045.26
201 J 1001 20062271 null 500 100 2008-8-20 11:09:46 300
表B:(明细表) no jh bh gz money num1 rq
999998 1001 20062271 01070201 2.8 0 2008-8-20 11:09:46
999998 1001 20062272 01070201 2.8 0 2008-8-20 11:11:52所有明细表B的都往日志表A中插入一条记录,且表A的ZY字段为“J”我要想的数据是表A的所有字段内容,
要求:如果表A里的CHR2字段为null时,则取表B的GZ字段内容。
表A:(日志)
no zy jh bh chr2 money num1 rq ye
999998 B null null 01010104 1000 0.25 2009-6-24 12:12:00 1045.26
201 J 1001 20062271 null 500 100 2008-8-20 11:09:46 300
表B:(明细表) no jh bh gz money num1 rq
999998 1001 20062271 01070201 2.8 0 2008-8-20 11:09:46
999998 1001 20062272 01070201 2.8 0 2008-8-20 11:11:52所有明细表B的都往日志表A中插入一条记录,且表A的ZY字段为“J”我要想的数据是表A的所有字段内容,
要求:如果表A里的CHR2字段为null时,则取表B的GZ字段内容。
参考:
SELECT A.NO,
A.ZY,
A.JH,
A.BH,
NVL(A.CHR2, B.GZ),
A.MONEY,
A.NUM1,
A.RQ,
A.YE
FROM A, B
WHERE A.NO = B.NO(+)
A.ZY,
A.JH,
A.BH,
NVL(A.CHR2, B.GZ),
A.MONEY,
A.NUM1,
A.RQ,
A.YE
FROM A left join B
on A.NO = B.NO
A.ZY,
A.JH,
A.BH,
decode(A.CHR2,null, B.GZ,a.CHR2),
A.MONEY,
A.NUM1,
A.RQ,
A.YE
FROM A, B
WHERE A.NO = B.NO(+) 用decode也可以
表A是日志表,表B的所有记录都要往表A插入,
表A和NO和表B的NO字段是关联的,表B往表A插入的记录都是表A中ZY字段为“J”的内容,但是CHR2为空,我就是想,如果表A的CHR2字段为空时,则取表B的GZ字段,谢谢
TA.JH,
TA.BH,
decode(TA.ZY,'J',tb.GZ,'B',ta.chr2),
ROUND(TA.MONEY,2) ,
ROUND(TA.NUM1,2),
TA.RQ,
ROUND( TA.TE,2) FROM A ta,
B tb
WHERE ta.NO=tb.NO(+) AND
TA.ZY IN ('B','J') AND
TA.RQ>=TO_DATE('20080227','YYYYMMDD') AND
TA.RQ<=TO_DATE('20080227','YYYYMMDD')+1
GROUP BY TA.NO,
TA.JH,
TA.INVNO,
decode(TA.ZY,'J',tb.GZ,'B',ta.chr2),
ROUND(TA.MONEY,2) ,
ROUND(TA.NUM1,2),
TA.RQ,
ROUND( TA.YE,2)
这是我写的SQL,执行后,每条记录就会出现重复的的,应该只有7条记录,结果出现了14条记录,
我的意思就是想,如果表A的ZY字段是‘J’时,则取表B的GZ字段,如果是‘B’时,则取表A的CHR2字段
你取的是A表的记录,A,B两个表是主从表的关系,因为靠no来关联的,这时肯定会出现多条记录。
TA.JH,
TA.BH,
decode(TA.ZY,'J',tb.GZ,'B',ta.chr2,null),
ROUND(TA.MONEY,2) ,
ROUND(TA.NUM1,2),
TA.RQ,
ROUND( TA.TE,2) FROM A ta,
B tb
WHERE ta.NO=tb.NO(+) AND
TA.ZY IN ('B','J') AND
TA.RQ>=TO_DATE('20080227','YYYYMMDD') AND
TA.RQ <=TO_DATE('20080227','YYYYMMDD')+1
GROUP BY TA.NO,
TA.JH,
TA.INVNO,
decode(TA.ZY,'J',tb.GZ,'B',ta.chr2,null),
ROUND(TA.MONEY,2) ,
ROUND(TA.NUM1,2),
TA.RQ,
ROUND( TA.YE,2)
这是我写的SQL,执行后,每条记录就会出现重复的的,应该只有7条记录,结果出现了14条记录,
我的意思就是想,如果表A的ZY字段是‘J’时,则取表B的GZ字段,如果是‘B’时,则取表A的CHR2字段我取的这天的原始数据中,表A的CHR2和表B中的GZ都是为NULL ,如果表A的CHR2和表B的GZ都为NULL时,则显示是空
select no , zy , jh , bh
, nvl(a.chr2,(select MAX(b.GZ) from b where a.no=b.no)) , money , num1 , rq ,ye
from a
select no , zy , jh , bh
, nvl(a.chr2,(select b.GZ from b where a.no=b.no and rownum<2)) , money , num1 , rq ,ye
from a