Oracle中怎么利用row_number()over()方式解决插入数据时重复键

发布时间:2021-08-02 15:27:47 作者:Leah
来源:亿速云 阅读:282

本篇文章为大家展示了Oracle中怎么利用row_number()over()方式解决插入数据时重复键,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。


导入目的表

Oracle中怎么利用row_number()over()方式解决插入数据时重复键

Oracle中怎么利用row_number()over()方式解决插入数据时重复键

上图中可以看到,我们的目的表中的主键有三个orgcode,saleno和serialno

源表

源表还是我们SQL数据库里的表

Oracle中怎么利用row_number()over()方式解决插入数据时重复键

从两个数据表中可以看到部分列需要我们自己对应的,而源表中并没有serialno这一项,通过表分析我们可以看出,如果说源表的数据中同一个SaleNo中如果有两个ZfCode,我们如果把Serialno设置为一个默认值 ,肯定会变为插入重复键了。

我们执行一下默认的插入语句,系统直接弹出重复键的问题

Oracle中怎么利用row_number()over()方式解决插入数据时重复键

Oracle中怎么利用row_number()over()方式解决插入数据时重复键

我们看了一下数据中SaleNo的2019040100015486中有两条数据,按我们要导入的表的主键orgcode,Saleno,Serialno,这样插入肯定是重复键了

Oracle中怎么利用row_number()over()方式解决插入数据时重复键

解决上面这个问题我们就用到了row_number()over()的函数

通过我们把Saleno进行分组排序,修改一下查询的数据

Oracle中怎么利用row_number()over()方式解决插入数据时重复键

Oracle中怎么利用row_number()over()方式解决插入数据时重复键

可以看到同一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()方式解决插入数据时重复键,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. 数据库数据文件和控制文件恢复
  2. python Oracle常见查询的用法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

oracle

上一篇:C语言如何实现简单的内存池

下一篇:怎么用js绘制两个相交的矩形并且其中有一个包含透明度

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》