首先因为需要查询很多字段,也就排除了使用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. Influx Sql系列教程七:delete 删除数据

    前面介绍了使用insert实现新增和修改记录的使用姿势,接下来我们看一下另外一个简单的使用方式,如何删除数据 1. delete 语句 delete的官方语法如下 DELETE FROM <me ...

  2. C++学习笔记 之 循环

    循环 循环语句允许我们多次执行一个语句或者语句组.(插入流程图) 循环类型 C++为我们提供的循环类型如下: 循环类型 描述 while循环 当给定条件为真时,重复语句或语句组.它会在执行循环主体之前 ...

  3. docker自动化脚本

    使用脚本从git上拉取项目并运行, 有些不足的地方 编写脚本 run.sh 如果用到redis和myslq,要先启动redis和mysql #!/bin/bash # author:qiao # 更新 ...

  4. Kafka 初识

    1.Kafka 是什么? 用一句话概括一下:Apache Kafka 是一款开源的消息引擎系统. 倘若“消息引擎系统“这个词对你来说有点陌生的话,那么“消息队列“.“消息中间件”的提法想必你一定是有所 ...

  5. 组件系列之RabbitMQ

    官网: https://www.rabbitmq.com/getstarted.html 1.四种交换机 TODO... 2.消费者获取消息方式:推 和 拉 拉取:每次拉取一条,循环拉取需要的条数在批 ...

  6. 基于MBT的自动化测试工具——GraphWalker介绍和实际使用

    GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例. 本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWa ...

  7. 记录Quarter的基本使用

    原文:记录Quarter的基本使用 using Quartz; using Quartz.Impl; using Quartz.Impl.Matchers; using Quartz.Logging; ...

  8. vim操作常用命令总结

    这里记录下linux在vim编辑器中的常用命令 vi 的三种模式: 一般模式:以vi打开一个文件时,就是一般模式:可以移动光标,删除字符或删除整行,可以复制.粘贴等操作 编辑模式:在一般模式按下 i ...

  9. Jenkins 构建方式有几种

    jenkins三种部署方式: 一.jenkins触发式构建:用于开发环境部署,开发人员push代码或者合并代码到gitlab项目的master分支,jenkins就部署代码到对应服务器. 二.jenk ...

  10. Linux REDHAT 7 关闭、禁用防火墙服务

    1 查看防火墙状态 [root@lvxinghao ~]# systemctl status firewalld 2 查看开机是否启动防火墙服务[root@lvxinghao ~]# systemct ...