oracle 替换函数问题

freefish45 2011-05-12 03:18:45
现有两个oracle表test1 、test2,想比对两张表的数据
以test1的数据为主,用test2的补充,写了一段代码
select a.号码 AS HM,
a.DAT_ AS JHRQ,
a.计划时间 AS JHSJ,
a.预计时间 AS YJSJ,
a.实际时间 AS SJSJ,
NVL(a.型号,b.XH)XH,
NVL(A.JW,B.JW)JW,
NVL(A.JWLX,B.JWLX)JWLX,
NVL(A.JCBZ,B.JCBZ)JCBZ,
A.发送方 AS FS,
NVL(A.JT1,B.JT1)JT1,
NVL(A.JT2,B.JT2)JT2,
NVL(A.jt3,B.JT3)JT3,
A.接收方 AS JS,
A.任务 AS RW,
NVL(A. SX, b. SX) SX
from test1 a, test2 b

where a.DAT_=b.Jhrq and a. 号码=b. HM and b.hM like '%AB%'
其中NVL里的A.的数据都是空,需要用B的补充的
另外如test1里的时间项有1900-1-1的数据需要用test2相应的时间项替换
这样查出来的数据有个别是重复的,即两条数据除JCBZ一个为进,一个为出之外所有项都一样的
13999124444 2011-5-12 2011-5-12 00:00:30 00:00:31 00:00:31 SMS 15 I 出 ABC A CDE SEND OK
13999124444 2011-5-12 2011-5-12 00:00:30 00:00:31 00:00:31 SMS 15 I 进 ABC A CDE SEND OK
第一条数据是正确的,第二条是错的,
请问问题出在哪里?时间项替换该怎么做
...全文
796 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rotel-刘志东 2011-05-13
  • 打赏
  • 举报
回复
----具体要看限制条件了,最好用left join
select a.号码 AS HM,
a.DAT_ AS JHRQ,
a.计划时间 AS JHSJ,
a.预计时间 AS YJSJ,
a.实际时间 AS SJSJ,
NVL(a.型号,b.XH)XH,
NVL(A.JW,B.JW)JW,
NVL(A.JWLX,B.JWLX)JWLX,
NVL(A.JCBZ,B.JCBZ)JCBZ,
A.发送方 AS FS,
NVL(A.JT1,B.JT1)JT1,
NVL(A.JT2,B.JT2)JT2,
NVL(A.jt3,B.JT3)JT3,
A.接收方 AS JS,
A.任务 AS RW,
NVL(A. SX, b. SX) SX
from test1 a,
left join test2 b
where a.DAT_=b.Jhrq and 限制条件
sjwl111 2011-05-13
  • 打赏
  • 举报
回复
看不太懂楼主的意思,如果是出现重复数据应该是你有某个表有来关联的字段是有重复数据的,就是说你某个表有两条记条都是满足以下条件的。1对1关系是变不出两条的。
a.DAT_=b.Jhrq and a. 号码=b. HM and b.hM like '%AB%'
如果你的时间又有可能是”1900-1-1“又有可能是空值的话,你可用
case when a.计划时间=to_date(19000101,'yyyymmdd') or a.计划时间 is null then b.计划时间 else a.计划时间 end
freefish45 2011-05-13
  • 打赏
  • 举报
回复
那时间替换呢?就是A里的 a.计划时间 ,
a.预计时间 ,
a.实际时间=‘1900-1-1’时替换成B的B.JHSJ,B.YJSJ,B.SJSJ

[Quote=引用 4 楼 lzd_83 的回复:]
SQL code
----具体要看限制条件了,最好用left join
select a.号码 AS HM,
a.DAT_ AS JHRQ,
a.计划时间 AS JHSJ,
a.预计时间 AS YJSJ,
a.实际时间 AS SJSJ,
NVL(a.型号,b.XH)XH,
NVL(A.JW,B.JW)JW,
NVL(A.JWLX,B.J……
[/Quote]
freefish45 2011-05-13
  • 打赏
  • 举报
回复
我的语句是写在oracle数据库里的,相当于建了一个视图
这样写语法是错的

[Quote=引用 3 楼 sjwl111 的回复:]
看不太懂楼主的意思,如果是出现重复数据应该是你有某个表有来关联的字段是有重复数据的,就是说你某个表有两条记条都是满足以下条件的。1对1关系是变不出两条的。
a.DAT_=b.Jhrq and a. 号码=b. HM and b.hM like '%AB%'
如果你的时间又有可能是”1900-1-1“又有可能是空值的话,你可用
case when a.计划时间=to_date(19000101……
[/Quote]
freefish45 2011-05-13
  • 打赏
  • 举报
回复
但是我的语句是写在oracle数据库的

[Quote=引用 2 楼 shadow1986a 的回复:]
时间可以用下面方法替换
replace(to_char(a.计划时间,'yyyy-mm-dd'),'1900-1-1',b.计划时间)
[/Quote]
shadow1986a 2011-05-12
  • 打赏
  • 举报
回复
时间可以用下面方法替换
replace(to_char(a.计划时间,'yyyy-mm-dd'),'1900-1-1',b.计划时间)
shadow1986a 2011-05-12
  • 打赏
  • 举报
回复
这个不是替换函数的问题, 你应该用左连接 test1  left join test2 on a.DAT_=b.Jhrq and a. 号码=b. HM and b.hM like '%AB%'

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧