【问题标题】:Case sensitive duplicate values in oracleoracle中区分大小写的重复值
【发布时间】:2017-12-05 18:52:57
【问题描述】:

我有一张包含以下示例记录的表格

Name    Profession      University
-----   --------------  ---------------
Ram     Student         xxxUniversity
Ravi    Professor       xyzUniversity
Reshma  Professor       abcUniversity
Ram     StudenT         xxxUniversity

如上所示,“Ram”具有区分大小写的重复记录。我的 Oracle 查询应该返回不同的记录和一条“Ram”记录,它在 Profession 列中具有最大数量的大写字符。

预期结果

    Name    Profession      University
    -----   --------------  ---------------
    Ravi    Professor       xyzUniversity
    Reshma  Professor       abcUniversity
    Ram     StudenT         xxxUniversity

【问题讨论】:

标签: sql oracle duplicates


【解决方案1】:

试试这个:

SELECT name,
       Profession,
       university
FROM
(SELECT name,
       Profession,
       university,
       ROW_NUMBER() OVER (PARTITION BY NAME,UPPER(PROFESSION) ORDER BY REGEXP_COUNT (Profession, '[A-Z]') DESC) RN
  FROM table1)
WHERE RN=1;

【讨论】:

  • 谢谢!解决了我的问题:)
【解决方案2】:

获取按转换为大写(或小写)的每一列的唯一值划分的行号:

SELECT name, profession, university
FROM   (
  SELECT name, profession, university,
         ROW_NUMBER()
           OVER (
             PARTITION BY
               UPPER( name ),
               UPPER( profession ),
               UPPER( university )
             ORDER BY
               LENGTH( TRANSLATE( profession, ' abcdefghijklmnopqrstuvwxyz', ' ' ) ) DESC
           )
           AS rn
  FROM   your_table
)
WHERE  rn = 1;

【讨论】:

  • ORDER BY 在 ROW_NUMBER() 中缺失
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2014-02-05
  • 2011-02-11
相关资源
最近更新 更多