博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 查询结果去重保留一项
阅读量:7228 次
发布时间:2019-06-29

本文共 4208 字,大约阅读时间需要 14 分钟。

首先因为需要查询很多字段,也就排除了使用distinct的可能性。

1.1 原始sql

select finalSql.*  from (select '' SMS_CONTENT,               '2' as 短信发出类型_批量发出,               yqdz.yqdz_hz_mc 短信接收方姓名,               case                 when wc.JTDH is not null then                  wc.JTDH                 when wc.XIAOLINGTONG is not null then                  wc.XIAOLINGTONG                 when wc.SJ is not null then                  wc.SJ               end 短信接受方手机号,               '' 业务对象ID,               yqdz.org_id 区分码          from yongqidizhi yqdz          left join kehuview wc            on wc.Y_ID = yqdz.yqdz_kh_id          left join ranqibiao rqb            on rqb.RQB_YQDZ_ID = yqdz.yqdz_id         where (wc.JTDH is not null or wc.XIAOLINGTONG is not null or               wc.SJ is not null)           and yqdz.yqdz_kh_lx = '2') finalSql where length(trim(finalSql.短信接受方手机号)) = 11

1.2 查询结果

很显然存在重复项

1.3 查询总数

 

2.1 修改sql

select finalSql.SMS_CONTENT,               finalSql.短信发出类型_批量发出,               finalSql.短信接收方姓名,               finalSql.短信接受方手机号,               finalSql.业务对象ID,               finalSql.区分码,               count(*) as 次数          from (select '' SMS_CONTENT,                       '2' as 短信发出类型_批量发出,                       yqdz.yqdz_hz_mc 短信接收方姓名,                       case                         when wc.JTDH is not null then                          wc.JTDH                         when wc.XIAOLINGTONG is not null then                          wc.XIAOLINGTONG                         when wc.SJ is not null then                          wc.SJ                       end 短信接受方手机号,                       '' 业务对象ID,                       yqdz.org_id 区分码                  from yongqidizhi yqdz                  left join kehuview wc                    on wc.Y_ID = yqdz.yqdz_kh_id                  left join ranqibiao rqb                    on rqb.RQB_YQDZ_ID = yqdz.yqdz_id                 where (wc.JTDH is not null or wc.XIAOLINGTONG is not null or                       wc.SJ is not null)                   and yqdz.yqdz_kh_lx = '2') finalSql         where length(trim(finalSql.短信接受方手机号)) = 11         group by finalSql.SMS_CONTENT,                  finalSql.短信发出类型_批量发出,                  finalSql.短信接收方姓名,                  finalSql.短信接受方手机号,                  finalSql.业务对象ID,                  finalSql.区分码         order by 次数 desc

2.2 查询结果:

我是根据手机号进行分组的,很显然,这里存在很多的垃圾数据,我们需要将这些相同的数据只保留一条

2.3 查询总的记录数

3.1 因为返回结果并不需要“count(*)” 这个字段,因此在最外层再加一层查询,改进sql如下

select finalSql2.SMS_CONTENT,       finalSql2.短信发出类型_批量发出,       finalSql2.短信接收方姓名,       finalSql2.短信接受方手机号,       finalSql2.业务对象ID,       finalSql2.区分码  from (select finalSql.SMS_CONTENT,               finalSql.短信发出类型_批量发出,               finalSql.短信接收方姓名,               finalSql.短信接受方手机号,               finalSql.业务对象ID,               finalSql.区分码,               count(*) as 次数          from (select '' SMS_CONTENT,                       '2' as 短信发出类型_批量发出,                       yqdz.yqdz_hz_mc 短信接收方姓名,                       case                         when wc.JTDH is not null then                          wc.JTDH                         when wc.XIAOLINGTONG is not null then                          wc.XIAOLINGTONG                         when wc.SJ is not null then                          wc.SJ                       end 短信接受方手机号,                       '' 业务对象ID,                       yqdz.org_id 区分码                  from yongqidizhi yqdz                  left join kehuview wc                    on wc.Y_ID = yqdz.yqdz_kh_id                  left join ranqibiao rqb                    on rqb.RQB_YQDZ_ID = yqdz.yqdz_id                 where (wc.JTDH is not null or wc.XIAOLINGTONG is not null or                       wc.SJ is not null)                   and yqdz.yqdz_kh_lx = '2') finalSql         where length(trim(finalSql.短信接受方手机号)) = 11         group by finalSql.SMS_CONTENT,                  finalSql.短信发出类型_批量发出,                  finalSql.短信接收方姓名,                  finalSql.短信接受方手机号,                  finalSql.业务对象ID,                  finalSql.区分码         order by 次数 desc) finalsql2

3.2 查询结果

3.3 查询总数

可见总数与第二步一致,并未缺少数据。

 

总结,因水平问题,在此只考虑最终查询结果符合要求,并未考虑性能、耗时等其他因素,如有需要,后期再做打算。

如有问题,欢迎大家斧正。

 

转载于:https://www.cnblogs.com/luxd/p/6382963.html

你可能感兴趣的文章
KgMall B2B/B2B2c/C2C版店铺商号初始化
查看>>
Linux内核的ioctl函数学习
查看>>
Liunx Shell入门
查看>>
Thread的中断
查看>>
linux --- 内存管理
查看>>
PostgreSQL
查看>>
CPU 超线程、多核
查看>>
用ASCII码显示string.xml中的特殊字符
查看>>
网站301跳转到新域名
查看>>
codewars020: The Clockwise Spiral 数字顺时针螺旋矩阵
查看>>
ios 下拉刷新
查看>>
Django在Windows系统下的安装配置
查看>>
懒到极致:对mybatis的进一步精简
查看>>
Android学习之OTA Update
查看>>
Maven Multi-environment package
查看>>
JMM-java内存模型
查看>>
iOS的soap应用(webservice) 开发
查看>>
Delphi listview 点击列头排序
查看>>
android preference page
查看>>
mysql索引挑选
查看>>