求救..小白被困多天了,c币提问..

小孔大胖 2017-10-27 09:18:04
现在想对一个表内的数据去重,数据类型大概如下,



现在的需求是,sitecode1=sitecode2 的情况,去重,只留一条
并且,对于交叉相等的情况,比如sitecode1||sitecode2=sitecode2||sitecode1,也去重,只留一条

实在转不过来弯了..

在线等大神们支持.
...全文
934 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
引用 22 楼 minsic78 的回复:
[quote=引用 21 楼 qq646748739 的回复:]
[quote=引用 20 楼 minsic78 的回复:]
[quote=引用 19 楼 qq646748739 的回复:]
[quote=引用 18 楼 minsic78 的回复:]
[quote=引用 17 楼 qq646748739 的回复:]
[quote=引用 16 楼 小孔大胖的回复:][quote=引用 15 楼 qq646748739 的回复:]
t.*, ,后面对了个,

--2.sql实现如下:
select x.*
from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
where rn = 1


谢谢老哥!!马上测试 然后火速回来结帖...我好好学习一下这条SQL,虽然是花RMB换的分,但是一点不心疼,能碰到老哥这样的大神,很高兴[/quote]
交学费,少走点弯路也好。
我2007年交了10800RMB去培训过oracle。

此楼结贴,重要的事情说一遍![/quote]

1万RMB是什么培训?OCP少有那么贵的吧,OCM又没那么便宜[/quote]
参加了Oracle+MSSQL的培训。
额,这贴结的有水平~[/quote]

就是纯培训?真舍得下本钱啊。
这贴结的不错,哈哈哈哈 [/quote]
嗯,纯培训,本来培训半年了,我培训了5个月就出来找工作了。[/quote]
[/quote]
2007年开始实习,刚开始做的是软件测试,后来转做Java开发,然后做了5年Oracle数据库、数据仓库和BI
现在搞了3年大数据了。Oracle都忘记差不多了,最近一个月才回来看看,顺便温习了Oracle。

minsic78 2017-10-27
  • 打赏
  • 举报
回复
引用 21 楼 qq646748739 的回复:
[quote=引用 20 楼 minsic78 的回复:] [quote=引用 19 楼 qq646748739 的回复:] [quote=引用 18 楼 minsic78 的回复:] [quote=引用 17 楼 qq646748739 的回复:] [quote=引用 16 楼 小孔大胖的回复:][quote=引用 15 楼 qq646748739 的回复:] t.*, ,后面对了个,

--2.sql实现如下:
select x.*
  from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
 where rn = 1
谢谢老哥!!马上测试 然后火速回来结帖...我好好学习一下这条SQL,虽然是花RMB换的分,但是一点不心疼,能碰到老哥这样的大神,很高兴[/quote] 交学费,少走点弯路也好。 我2007年交了10800RMB去培训过oracle。 此楼结贴,重要的事情说一遍![/quote] 1万RMB是什么培训?OCP少有那么贵的吧,OCM又没那么便宜[/quote] 参加了Oracle+MSSQL的培训。 额,这贴结的有水平~[/quote] 就是纯培训?真舍得下本钱啊。 这贴结的不错,哈哈哈哈 [/quote] 嗯,纯培训,本来培训半年了,我培训了5个月就出来找工作了。[/quote]
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
引用 20 楼 minsic78 的回复:
[quote=引用 19 楼 qq646748739 的回复:]
[quote=引用 18 楼 minsic78 的回复:]
[quote=引用 17 楼 qq646748739 的回复:]
[quote=引用 16 楼 小孔大胖的回复:][quote=引用 15 楼 qq646748739 的回复:]
t.*, ,后面对了个,

--2.sql实现如下:
select x.*
from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
where rn = 1


谢谢老哥!!马上测试 然后火速回来结帖...我好好学习一下这条SQL,虽然是花RMB换的分,但是一点不心疼,能碰到老哥这样的大神,很高兴[/quote]
交学费,少走点弯路也好。
我2007年交了10800RMB去培训过oracle。

此楼结贴,重要的事情说一遍![/quote]

1万RMB是什么培训?OCP少有那么贵的吧,OCM又没那么便宜[/quote]
参加了Oracle+MSSQL的培训。
额,这贴结的有水平~[/quote]

就是纯培训?真舍得下本钱啊。
这贴结的不错,哈哈哈哈 [/quote]
嗯,纯培训,本来培训半年了,我培训了5个月就出来找工作了。
minsic78 2017-10-27
  • 打赏
  • 举报
回复
引用 19 楼 qq646748739 的回复:
[quote=引用 18 楼 minsic78 的回复:] [quote=引用 17 楼 qq646748739 的回复:] [quote=引用 16 楼 小孔大胖的回复:][quote=引用 15 楼 qq646748739 的回复:] t.*, ,后面对了个,

--2.sql实现如下:
select x.*
  from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
 where rn = 1
谢谢老哥!!马上测试 然后火速回来结帖...我好好学习一下这条SQL,虽然是花RMB换的分,但是一点不心疼,能碰到老哥这样的大神,很高兴[/quote] 交学费,少走点弯路也好。 我2007年交了10800RMB去培训过oracle。 此楼结贴,重要的事情说一遍![/quote] 1万RMB是什么培训?OCP少有那么贵的吧,OCM又没那么便宜[/quote] 参加了Oracle+MSSQL的培训。 额,这贴结的有水平~[/quote] 就是纯培训?真舍得下本钱啊。 这贴结的不错,哈哈哈哈
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
引用 18 楼 minsic78 的回复:
[quote=引用 17 楼 qq646748739 的回复:]
[quote=引用 16 楼 小孔大胖的回复:][quote=引用 15 楼 qq646748739 的回复:]
t.*, ,后面对了个,

--2.sql实现如下:
select x.*
from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
where rn = 1


谢谢老哥!!马上测试 然后火速回来结帖...我好好学习一下这条SQL,虽然是花RMB换的分,但是一点不心疼,能碰到老哥这样的大神,很高兴[/quote]
交学费,少走点弯路也好。
我2007年交了10800RMB去培训过oracle。

此楼结贴,重要的事情说一遍![/quote]

1万RMB是什么培训?OCP少有那么贵的吧,OCM又没那么便宜[/quote]
参加了Oracle+MSSQL的培训。
额,这贴结的有水平~
minsic78 2017-10-27
  • 打赏
  • 举报
回复
引用 17 楼 qq646748739 的回复:
[quote=引用 16 楼 小孔大胖的回复:][quote=引用 15 楼 qq646748739 的回复:] t.*, ,后面对了个,

--2.sql实现如下:
select x.*
  from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
 where rn = 1
谢谢老哥!!马上测试 然后火速回来结帖...我好好学习一下这条SQL,虽然是花RMB换的分,但是一点不心疼,能碰到老哥这样的大神,很高兴[/quote] 交学费,少走点弯路也好。 我2007年交了10800RMB去培训过oracle。 此楼结贴,重要的事情说一遍![/quote] 1万RMB是什么培训?OCP少有那么贵的吧,OCM又没那么便宜
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
引用 16 楼 小孔大胖的回复:
[quote=引用 15 楼 qq646748739 的回复:] t.*, ,后面对了个,

--2.sql实现如下:
select x.*
  from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
 where rn = 1
谢谢老哥!!马上测试 然后火速回来结帖...我好好学习一下这条SQL,虽然是花RMB换的分,但是一点不心疼,能碰到老哥这样的大神,很高兴[/quote] 交学费,少走点弯路也好。 我2007年交了10800RMB去培训过oracle。 此楼结贴,重要的事情说一遍!
小孔大胖 2017-10-27
  • 打赏
  • 举报
回复
引用 15 楼 qq646748739 的回复:
t.*, ,后面对了个,

--2.sql实现如下:
select x.*
  from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
 where rn = 1
谢谢老哥!!马上测试 然后火速回来结帖...我好好学习一下这条SQL,虽然是花RMB换的分,但是一点不心疼,能碰到老哥这样的大神,很高兴
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
t.*, ,后面对了个,

--2.sql实现如下:
select x.*
from (select t.*, row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
where rn = 1
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
引用 11 楼 qq_40109328 的回复:
确实..其实这个表里面20多个字段...

sql语句调整了下,添加:greatest(sitecode1,sitecode2) ,刚才的不是很严谨
表里面20个字段都可以查询出来

--2.sql实现如下:
select x.*
from (select t.*, ,row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp t) x
where rn = 1
小孔大胖 2017-10-27
  • 打赏
  • 举报
回复
引用 12 楼 qq646748739 的回复:
sql语句调整了下,添加:greatest(sitecode1,sitecode2) 刚才的不是很严谨 [code=sql] --2.sql实现如下: select id, sitecode1,sitecode2 from (select id,sitecode1,sitecode2,row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp) where rn = 1
老哥看见我的回复了吗,我想显示全部字段~
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
sql语句调整了下,添加:greatest(sitecode1,sitecode2)
刚才的不是很严谨
[code=sql]
--2.sql实现如下:
select id, sitecode1,sitecode2
from (select id,sitecode1,sitecode2,row_number()over(partition by least(sitecode1,sitecode2)||greatest(sitecode1,sitecode2) order by 1) rn from tmp)
where rn = 1
小孔大胖 2017-10-27
  • 打赏
  • 举报
回复
确实..其实这个表里面20多个字段...
uu3131313131 2017-10-27
  • 打赏
  • 举报
回复
引用 5 楼 qq646748739 的回复:
[quote=引用 1 楼 uu3131313131的回复:]时间有点急,所以分析一波提供思路: sitecode1||sitecode2=sitecode2||sitecode1,也去重,只留一条 这个业务场景就是 X||Y=Y||X ,隐含的意思就是X=Y,否则不会相等《=可能我考虑不周
隐含不是X=Y,楼主是针对两行或两行以上数据来说的。[/quote] 这个需求描述就2行数据,因此隐含X=Y,这样处理方便少被业务带到沟里。 3行以上就不存在这个规则了,还是老哥你稳~
小孔大胖 2017-10-27
  • 打赏
  • 举报
回复
引用 3 楼 qq646748739 的回复:
@楼主,经过测试和验证,上面SQL可以实现你的需求。
有个事儿..想优化一下,就是这个表其实有多行字段~我能否显示全部字段~
小孔大胖 2017-10-27
  • 打赏
  • 举报
回复
引用 5 楼 qq646748739 的回复:
[quote=引用 1 楼 uu3131313131的回复:]时间有点急,所以分析一波提供思路: sitecode1||sitecode2=sitecode2||sitecode1,也去重,只留一条 这个业务场景就是 X||Y=Y||X ,隐含的意思就是X=Y,否则不会相等《=可能我考虑不周
隐含不是X=Y,楼主是针对两行或两行以上数据来说的。[/quote] 有个事儿..想优化一下,就是这个表其实有多行字段~我能否显示全部字段~
  • 打赏
  • 举报
回复
引用 2 楼 qq646748739 的回复:
SQL实现如下:

--1.创建测试表,并添加模拟数据:
create table tmp as
select 'CH12345678' sitecode1, 'CH45678901' sitecode2 from dual       --1
union all
select 'CH12345678' sitecode1, 'CH45678901' sitecode2 from dual       --2
union all
select 'CH12345688' sitecode1, 'CH12345668' sitecode2 from dual       --3
union all
select 'CH12345668' sitecode1, 'CH12345688' sitecode2 from dual       --4
union all
select 'CH12345648' sitecode1, 'CH45678958' sitecode2 from dual      --5
说明:
第1条和第2条数据:sitecode1=sitecode2
第3条和第4条数据:sitecode1||sitecode2=sitecode2||sitecode1
第5条为普通数据
--2.sql实现如下:
select sitecode1,sitecode2
  from (select sitecode1,sitecode2,row_number()over(partition by least(sitecode1,sitecode2) order by 1) rn from tmp)
 where rn = 1
小孔大胖 2017-10-27
  • 打赏
  • 举报
回复
引用 5 楼 qq646748739 的回复:
[quote=引用 1 楼 uu3131313131的回复:]时间有点急,所以分析一波提供思路: sitecode1||sitecode2=sitecode2||sitecode1,也去重,只留一条 这个业务场景就是 X||Y=Y||X ,隐含的意思就是X=Y,否则不会相等《=可能我考虑不周
隐含不是X=Y,楼主是针对两行或两行以上数据来说的。[/quote] 马上进行测试
碧水幽幽泉 2017-10-27
  • 打赏
  • 举报
回复
引用 1 楼 uu3131313131的回复:
时间有点急,所以分析一波提供思路: sitecode1||sitecode2=sitecode2||sitecode1,也去重,只留一条 这个业务场景就是 X||Y=Y||X ,隐含的意思就是X=Y,否则不会相等《=可能我考虑不周
隐含不是X=Y,楼主是针对两行或两行以上数据来说的。
uu3131313131 2017-10-27
  • 打赏
  • 举报
回复
经过分析,若是去除CODE1与CODE2重复字段 下面是去重操作: 1.建立一张同结构新表T,将去重数据放入新表T后,然后重命名表或是迁移数据至原表; 2.原表中使用row_number函数,根据字段1,2分组,留下row_number=1的数据。
加载更多回复(3)

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧