Oracle中怎么利用row_number()over()方式解决插入数据时重复键
本篇文章为大家展示了Oracle中怎么利用row_number()over()方式解决插入数据时重复键,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
成都创新互联公司是专业的濂溪网站建设公司,濂溪接单;提供成都网站制作、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行濂溪网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
导入目的表
上图中可以看到,我们的目的表中的主键有三个orgcode,saleno和serialno
源表
源表还是我们SQL数据库里的表
从两个数据表中可以看到部分列需要我们自己对应的,而源表中并没有serialno这一项,通过表分析我们可以看出,如果说源表的数据中同一个SaleNo中如果有两个ZfCode,我们如果把Serialno设置为一个默认值 ,肯定会变为插入重复键了。
我们执行一下默认的插入语句,系统直接弹出重复键的问题
我们看了一下数据中SaleNo的2019040100015486中有两条数据,按我们要导入的表的主键orgcode,Saleno,Serialno,这样插入肯定是重复键了
解决上面这个问题我们就用到了row_number()over()的函数
通过我们把Saleno进行分组排序,修改一下查询的数据
可以看到同一SaleNo下的两条数据自动排序了。
完整的插入代码
insert into tSalSalePay201904(Orgcode,Saleno,Trantype,Serialno,Zfcode,Zfname, Zfno,Paysstotal,Zftotal,Sstotal,Jzdate) select '0' as orgcode,"SaleNo","TranType", row_number() over(partition by "SaleNo" order by "SaleNo") as Serialno, "ZfCode","ZfName","ZfNo","ZfTotal","ZfTotal","ZfTotal","JzDate" from tJkSalePay201904@Odbc_Sql src where not exists(select * from tSalSalePay201904 dst where dst.Orgcode='0' and dst.Saleno=src."SaleNo")
基本上row_number() over()这个函数主要用在各种数据统计的sql中,感觉比group by好用的都,可以在一个查询中对多列数据进行分组,尤其在多表关联查询中,row_number() over()还是非常便捷的。
上述内容就是Oracle中怎么利用row_number()over()方式解决插入数据时重复键,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。
网页标题:Oracle中怎么利用row_number()over()方式解决插入数据时重复键
文章来源:http://scyanting.com/article/jphjgi.html