如何检查Case When Statement中的重复值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查Case When Statement中的重复值相关的知识,希望对你有一定的参考价值。

我试图在一个case语句中检查重复值作为几个检查之一。我使用的是SQL Developer和Oracle版本11.2以及SQL Developer版本17.2

寻找重复ID的代码的第一部分是我被困住的地方,我试图检查TABLE_RECORDS中的列ID是否具有重复值。

然后我在语句的其余部分运行额外的QC检查(这是一个更长的CASE WHEN语句的一部分,仅供参考)

我不知道这是一个语法问题还是有更好的方法来解决这个问题。

先感谢您。

SELECT
    CASE WHEN (
SELECT r.ID, COUNT(r.ID)
    FROM r
  GROUP BY ID
  HAVING COUNT (ID) > 1) 'Duplicate ID'
  WHEN r.ID IS NULL THEN 'NULL'
ELSE 'pass'
END AS Check_ID

    CASE WHEN r.First IS NULL THEN 'NULL'
ELSE 'pass'
     END AS Check_First_Name
from TABLE_RECORDS r
答案

如果table_records相对较小,为什么不尝试左外连接:

select  case 
          when a2.id is not null 
            then 'Duplicate ID'
            else null
        end check_id,
        case
          when a1.first is not null
            then 'Pass'
            else null
        end check_first_name
from    table_records a1
left outer join
        (
        select  id
        from    table_records
        group by id
        having count(*) > 1
        ) a2 on a1.id = a2.id;

使语句更容易阅读并简化语句时的情况。也很少将null转换为字符串('NULL'),通常最好将其保留为null。

以上是关于如何检查Case When Statement中的重复值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 dplyr 中的 case_when 捕获逻辑

oracle sql - 选择具有多个“case when”的语句并检查是不是包含文本

Spark:在 CASE WHEN 表达式中使用空检查来防止类型错误

SQL 检查分区中是不是存在值,使用 CASE WHEN 没有任何 JOIN

SQL DB2 - 可以缩短长期列出的“case when”语句吗?

SQL语句中case,when,then的用法