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

1.1 原始sql

select finalSql.*
from (select '' SMS_CONTENT,
'' 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 = '') 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,
'' 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 = '') 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,
'' 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 = '') 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 查询总数

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

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

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

Oracle 查询结果去重保留一项的更多相关文章

  1. oracle 多字段去重查询

      oracle 多字段去重查询 CreationTime--2018年6月29日15点11分 Author:Marydon 1.情景展示 需要对表BASE_MRI_DEVICE的COMPNAME.F ...

  2. Oracle查询和问题简记

    现在做两个版本的系统,一个用的数据库是Access,另一个就是Oracle了.每个数据库支持的的查询SQL语句都有所区别,这里主要针对Access和Oracle做 记录. 首先贴出遇到问题最多的一条语 ...

  3. Oracle查询表里的重复数据方法:

    一.背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. 二.解决 select id from group by id having count ...

  4. Oracle 查询(SELECT)语句(一)

    Ø  简介 本文介绍 Oracle 中查询(SELECT)语句的使用,在 SQL 中 SELECT 语句是相对内容较多的,也是相对比较复杂一点的,所以这里拿出来单独学习. 首先,我们先来理一下思路,我 ...

  5. Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

    Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数 关于处理小数点位数的几个oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) fr ...

  6. Oracle查询速度慢的原因总结

    Oracle查询速度慢的原因总结 查询速度慢的原因很多,常见如下几种:1,没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2,I/O吞吐量小,形成了瓶颈效应.3,没有创建计算列导致 ...

  7. [转帖]Oracle 查询各表空间使用情况--完善篇

    Oracle 查询各表空间使用情况--完善篇 链接:http://blog.itpub.net/28602568/viewspace-1770577/ 标题: Oracle 查询各表空间使用情况--完 ...

  8. 保留重复项(Power Query 之 M 语言)

    数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...

  9. Oracle打怪升级之路一【Oracle基础、Oracle查询】

    前言 背景:2021年马上结束了,在年尾由于工作原因接触到一个政府单位比较传统型的项目,数据库用的是Oracle.需要做的事情其实很简单,首先从大约2000多张表中将表结构及数据导入一个共享库中,其次 ...

随机推荐

  1. 从一个案例窥探ORACLE的PASSWORD_VERSIONS

    1.环境说明 ORACLE 客户端版本 11.2.0.1 ORACLE 服务端版本 12.2.0.1 2.异常现象 客户端(下文也称为Cp)访问服务端(Sp),报了一个错误: Figure 1 以错误 ...

  2. Postgresql中的large object

    1.初识postgresql large object 一位同事在对使用pg_dump备份出来的文件(使用plain格式)进行恢复时,觉得速度非常慢,让我分析一下是什么原因. 我拿到他的.bak文件, ...

  3. mysql查询列为空

    SELECT * FROM `表名` WHERE ISNULL(列名)

  4. Appium元素定位难点:tap坐标定位不准确

    tap用法 1.tap是模拟手指点击页面上元素语法有两个参数,第一个是positions,是list类型最多五个点,duration是持续时间,单位毫秒 tap(self, positions, du ...

  5. python实践项目三:将列表添加到字典

    1.创建一个字典,其中键是字符串,描述一个物品,值是一个整型值,说明有多少该物品.例如,字典值{'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, ...

  6. Windows快捷键大全

    每天在使用电脑,不会记点快捷键怎行?高效办公从快捷键开始! Windows 10 键盘快捷方式就是按键或按键组合,可提供一种替代方式来执行通常使用鼠标执行的操作. 其他键盘快捷方式 应用中的键盘快捷方 ...

  7. 01_Android入门

    Android系统文件目录结构 / 代表系统的根目录 /data/app/ 存放着第三方的apk文件 /system/app/ 其中是系统中的应用安装文件 /data/data/packagename ...

  8. 嵌入式02 STM32 实验01 端口复用和重映射

    内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface  ...

  9. Python3实现一个简单的tcp客户端,用于测试服务端端口开放情况

    需要Python的socket模块儿,windows使用netstat -an查看端口状态,Linux使用netstat -tunlp查看端口状态. # client 客户端 # TCP必须建立连接 ...

  10. go对elasticsearch的增删改查

    环境 elasticsearch 6.8 (6.x版本应该都没问题) go客户端sdk: github.com/elastic/go-elasticsearch/v6 其实自己封装api也行,反正el ...