首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL:查找重复的CLIENTKEY并显示一条特定记录

Oracle SQL:查找重复的CLIENTKEY并显示一条特定记录
EN

Stack Overflow用户
提问于 2018-08-23 18:29:20
回答 1查看 55关注 0票数 0

我有下面的表格:

代码语言:javascript
复制
CLIENTKEY  CLIENTNAME             DEPARTMENT  HOSTKEY
0201967/6  PPBOP1BOP01-JO,BLOGS   KB          PPBOP1BOP01/MSC/PPBOP1BOP01/2/B1KI0
0201967/6  PPBOP1BOP01-JO,BLOGS   BS          PPBOP1BOP01/MSC/PPBOP1BOP01/2/B1KI0
0024028/2  PPBOP1BOP01-FOO,BAR    KB          PPBOP1BOP01/MSC/PPBOP1BOP01/2/B2KI0
0024028/2  PPBOP1BOP01-FOO,BAR    BS          PPBOP1BOP01/MSC/PPBOP1BOP01/2/B2KI0
1746947/1  BSM1BSM03-THING,BOB    BS          BSM1BSM03/BSHVS/BSM1BSM03/2/B1KI0
1612105/1  WIBU1IBU03-TREE,GREEN  BS          WIBU1IBU03/SHVS/WIBU1IBU03/3/B1KI0

我尝试获取的输出如下:

代码语言:javascript
复制
CLIENTKEY  CLIENTNAME             DEPARTMENT  HOSTKEY
0201967/6  PPBOP1BOP01-JO,BLOGS   KB          PPBOP1BOP01/MSC/PPBOP1BOP01/2/B1KI0
0024028/2  PPBOP1BOP01-FOO,BAR    KB          PPBOP1BOP01/MSC/PPBOP1BOP01/2/B2KI0
1746947/1  BSM1BSM03-THING,BOB    BS          BSM1BSM03/BSHVS/BSM1BSM03/2/B1KI0
1612105/1  WIBU1IBU03-TREE,GREEN  BS           WIBU1IBU03/SHVS/WIBU1IBU03/3/B1KI0

因此,当CLIENTKEY重复但没有重复CLIENTKEY时,需要显示where DEPARTMENT = 'KB‘,将它们全部返回。

这可以在SQL语句中实现吗?

EN

回答 1

Stack Overflow用户

发布于 2018-08-23 18:57:30

您可以使用子查询为每一行分配一个排名,以便在有重复键(一个KB,其他任何键)的情况下,KB行的排名更高;然后根据此进行过滤:

代码语言:javascript
复制
-- CTE for sample data
with your_table (clientkey, clientname, department, hostkey) as (
  select '0201967/6', 'PPBOP1BOP01-JO,BLOGS', 'KB', 'PPBOP1BOP01/MSC/PPBOP1BOP01/2/B1KI0' from dual
  union all
  select '0201967/6', 'PPBOP1BOP01-JO,BLOGS', 'BS', 'PPBOP1BOP01/MSC/PPBOP1BOP01/2/B1KI0' from dual
  union all
  select '0024028/2', 'PPBOP1BOP01-FOO,BAR', 'KB', 'PPBOP1BOP01/MSC/PPBOP1BOP01/2/B2KI0' from dual
  union all
  select '0024028/2', 'PPBOP1BOP01-FOO,BAR', 'BS', 'PPBOP1BOP01/MSC/PPBOP1BOP01/2/B2KI0' from dual
  union all
  select '1746947/1', 'BSM1BSM03-THING,BOB', 'BS', 'BSM1BSM03/BSHVS/BSM1BSM03/2/B1KI0' from dual
  union all
  select '1612105/1', 'WIBU1IBU03-TREE,GREEN', 'BS', 'WIBU1IBU03/SHVS/WIBU1IBU03/3/B1KI0' from dual
)
-- actual query
select clientkey, clientname, department, hostkey
from (
  select clientkey, clientname, department, hostkey,
    rank () over (partition by clientkey
      order by case when department = 'KB' then 0 else 1 end) as rnk
  from your_table
)
where rnk = 1;

CLIENTKEY CLIENTNAME            DE HOSTKEY                            
--------- --------------------- -- -----------------------------------
0024028/2 PPBOP1BOP01-FOO,BAR   KB PPBOP1BOP01/MSC/PPBOP1BOP01/2/B2KI0
0201967/6 PPBOP1BOP01-JO,BLOGS  KB PPBOP1BOP01/MSC/PPBOP1BOP01/2/B1KI0
1612105/1 WIBU1IBU03-TREE,GREEN BS WIBU1IBU03/SHVS/WIBU1IBU03/3/B1KI0 
1746947/1 BSM1BSM03-THING,BOB   BS BSM1BSM03/BSHVS/BSM1BSM03/2/B1KI0  

这将仍然允许在其他部门中出现重复,并将包括所有这些行;它将仅排除KB的重复。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51983696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档