Oracle 查询结果去重保留一项
首先因为需要查询很多字段,也就排除了使用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 查询结果去重保留一项的更多相关文章
- oracle 多字段去重查询
oracle 多字段去重查询 CreationTime--2018年6月29日15点11分 Author:Marydon 1.情景展示 需要对表BASE_MRI_DEVICE的COMPNAME.F ...
- Oracle查询和问题简记
现在做两个版本的系统,一个用的数据库是Access,另一个就是Oracle了.每个数据库支持的的查询SQL语句都有所区别,这里主要针对Access和Oracle做 记录. 首先贴出遇到问题最多的一条语 ...
- Oracle查询表里的重复数据方法:
一.背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. 二.解决 select id from group by id having count ...
- Oracle 查询(SELECT)语句(一)
Ø 简介 本文介绍 Oracle 中查询(SELECT)语句的使用,在 SQL 中 SELECT 语句是相对内容较多的,也是相对比较复杂一点的,所以这里拿出来单独学习. 首先,我们先来理一下思路,我 ...
- Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数
Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数 关于处理小数点位数的几个oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) fr ...
- Oracle查询速度慢的原因总结
Oracle查询速度慢的原因总结 查询速度慢的原因很多,常见如下几种:1,没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2,I/O吞吐量小,形成了瓶颈效应.3,没有创建计算列导致 ...
- [转帖]Oracle 查询各表空间使用情况--完善篇
Oracle 查询各表空间使用情况--完善篇 链接:http://blog.itpub.net/28602568/viewspace-1770577/ 标题: Oracle 查询各表空间使用情况--完 ...
- 保留重复项(Power Query 之 M 语言)
数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...
- Oracle打怪升级之路一【Oracle基础、Oracle查询】
前言 背景:2021年马上结束了,在年尾由于工作原因接触到一个政府单位比较传统型的项目,数据库用的是Oracle.需要做的事情其实很简单,首先从大约2000多张表中将表结构及数据导入一个共享库中,其次 ...
随机推荐
- leetcode 55 Jump Game 三种方法,回溯、动态规划、贪心
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
- 14 SpringMVC框架的基本概念
1.三层架构 我们的开发架构一般都是基于两种形式,一种是 C/S 架构,也就是客户端/服务器,另一种是 B/S 架构,也就是浏览器服务器.在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发. ...
- python学习-63 组合
组合 1.什么是组合? 定义一个类,由数据属性构成,这几个属性又可以是通过一个类实例化的对象,这就是组合. 举例: class School: def __init__(self,name,addre ...
- Python-13-模块和包
一.模块的概念 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代 ...
- PAT(B) 1085 PAT单位排行(Java:20分)
题目链接:1085 PAT单位排行 (25 point(s)) 题目描述 每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式 输入第一行给出一个正整数 N ...
- Python简介及开发环境搭建
Python简介 Python是一门动态解释性的强类型定义的计算机程序设计语言,是一种完全面向对象的语言,由荷兰人"龟叔"-Guido van Rossum于1989年开发,于19 ...
- 10分钟用scratch写一个大鱼吃小鱼的小游戏
第一次给张江小朋友教Scratch课程之前,还在担心一些概念能不能向小朋友解释清楚,可上完课发现,我严重低估了小朋友的聪明程度,发现现在的孩子相比较自己8.9岁的时候,简直聪明太多倍了. 所以总结了半 ...
- Lucene BooleanQuery中的Occur.MUST与Occur.Should
https://www.cnblogs.com/weipeng/archive/2012/04/18/2455079.html 1. 多个MUST的组合不必多说,就是交集 2. MUST和SH ...
- C# ——Parallel类
一.Parallel类 Parallel类提供了数据和任务的并行性: 二.Paraller.For() Paraller.For()方法类似于C#的for循环语句,也是多次执行一个任务.使用Paral ...
- docker 入坑3
查看镜像 docker images [OPTIONS] [REPOSITORY[:TAG]] -a, --all=false -f, --filter=[] --no-trunc=false -q, ...