TAB1:
TAB2:
SELECT TA.CODE,
TA.SYJID,
TA.INVNO,
decode(TA.ZY,'J',tb.MFID,'B',ta.chr2,null),
ROUND(TA.MONEY,2) ,
ROUND(TA.NUM1,2),
TA.RQSJ,
ROUND( TA.YEJF,2) FROM TAB1 TA,
TAB2 TB
WHERE ta.CODE=tb.CUSTNO(+) AND
TA.ZY IN ('B','J') AND
TA.RQ>=TO_DATE('20080227','YYYYMMDD') AND
TA.RQ <=TO_DATE('20080227','YYYYMMDD')+1
GROUP BY TA.CODE,
TA.SYJID,
TA.INVNO,
decode(TA.ZY,'J',tb.MFID,'B',ta.chr2,null),
ROUND(TA.MONEY,2) ,
ROUND(TA.NUM1,2),
TA.RQ,
ROUND( TA.YEJF,2)
这是我写的SQL,执行后,每条记录就会出现重复的的,应该只有7条记录,结果出现了14条记录, 我的得到的结果就是,如果表A的ZY字段是‘J’时,则取表B的MFID字段,如果是‘B’时,则取表A的CHR2字段,如果ta.chr2与tb.MFID都为空时,则有空 我取的这天的原始数据中,表A的CHR2和表B中的GZ都是为NULL ,如果表A的CHR2和表B的GZ都为NULL时,则显示是空注:1.ta.code=tb.custno
2. tab2的每产生一条记录,都往tab1中插入一条记录,而ta.zy='J',但是插入的记录中,没有tb.MFID字段
TAB2:
SELECT TA.CODE,
TA.SYJID,
TA.INVNO,
decode(TA.ZY,'J',tb.MFID,'B',ta.chr2,null),
ROUND(TA.MONEY,2) ,
ROUND(TA.NUM1,2),
TA.RQSJ,
ROUND( TA.YEJF,2) FROM TAB1 TA,
TAB2 TB
WHERE ta.CODE=tb.CUSTNO(+) AND
TA.ZY IN ('B','J') AND
TA.RQ>=TO_DATE('20080227','YYYYMMDD') AND
TA.RQ <=TO_DATE('20080227','YYYYMMDD')+1
GROUP BY TA.CODE,
TA.SYJID,
TA.INVNO,
decode(TA.ZY,'J',tb.MFID,'B',ta.chr2,null),
ROUND(TA.MONEY,2) ,
ROUND(TA.NUM1,2),
TA.RQ,
ROUND( TA.YEJF,2)
这是我写的SQL,执行后,每条记录就会出现重复的的,应该只有7条记录,结果出现了14条记录, 我的得到的结果就是,如果表A的ZY字段是‘J’时,则取表B的MFID字段,如果是‘B’时,则取表A的CHR2字段,如果ta.chr2与tb.MFID都为空时,则有空 我取的这天的原始数据中,表A的CHR2和表B中的GZ都是为NULL ,如果表A的CHR2和表B的GZ都为NULL时,则显示是空注:1.ta.code=tb.custno
2. tab2的每产生一条记录,都往tab1中插入一条记录,而ta.zy='J',但是插入的记录中,没有tb.MFID字段
这个条件是A,B表的关联的唯一条件吗?
当tab2表往tab1表中插入一条记录时,
则:tab2.custno=tab1.code and tab2.syjh=tab1.syjid and tab2.fphm=tab1.invno
不好判断
tab2.custno=tab1.code and tab2.syjh=tab1.syjid and tab2.fphm=tab1.invno
你确认一下,有没有可以连接出结果的数据呀select * from TAB1 ta
WHERE TA.ZY IN ('B','J') AND
TA.RQ>=TO_DATE('20080227','YYYYMMDD') AND
TA.RQ <=TO_DATE('20080227','YYYYMMDD')+1 查查这个有没有数据。
ta.syjid ,
ta.invno,
nvl(ta.chr2,(select tb.mfid from RPT_SELLCUST tb where ta.code=tb.custno AND ta.syjid=tb.syjh AND ta.invno=tb.fphm and rownum <2)) chr2 ,
ROUND(TA.MONEY,2) mon ,
ROUND(TA.NUM1,2) num1,
TA.RQSJ,
ROUND( TA.YEJF ,2) yejf
from CRD_CARDLOG ta
WHERE ta.zy IN ('J','B') AND
ta.rqsj >= :v_rq1 AND
ta.rqsj < :v_rq2+1 and
nvl(ta.code,'%') like :v_code and
nvl(ta.chr2,'%') like :v_chr2
我已经找到了答复,谢谢大家