Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何检查Case When语句中的重复值_Oracle_Duplicates_Case When - Fatal编程技术网

Oracle 如何检查Case When语句中的重复值

Oracle 如何检查Case When语句中的重复值,oracle,duplicates,case-when,Oracle,Duplicates,Case When,我试图检查重复值,作为case when语句中的几个检查之一。我使用的是SQL Developer和Oracle 11.2版以及SQL Developer 17.2版 寻找重复ID的代码的第一部分是我被卡住的地方,我试图检查表_记录中的列ID是否有重复的值 然后,我在语句的其余部分运行附加的QC检查 (当语句仅供参考时,这是一个较长案例的一部分) 我不知道这是一个语法问题,还是有更好的方法来解决这个问题 先谢谢你 SELECT CASE WHEN ( SELECT r.ID, COUNT

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

寻找重复ID的代码的第一部分是我被卡住的地方,我试图检查表_记录中的列ID是否有重复的值

然后,我在语句的其余部分运行附加的QC检查 (当语句仅供参考时,这是一个较长案例的一部分)

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

先谢谢你

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

如果表_记录相对较小,为什么不尝试左外部联接:

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。

您不能使用Oracle 17.2版,当前版本为12.2。运行
选择*from v$version
查找您的版本;17.2可能是您的SQL开发人员版本。SQL Developer是一个独立的软件;您可以使用它与数据库交互,但它不是Oracle数据库的一部分。您好,您说得对,我正在运行Oracle 11.2和SQL Developer 17.2。感谢您捕捉到这一点,我编辑了原始问题。查询是否返回了正确的结果,或者这里是否存在其他问题?如果您不想允许重复,为什么不在该列上创建一个唯一的索引(在您的示例中是ID)?Dolos下面的回答对我来说很有用,上面的查询错误排除了“缺少表达式”。对于重复项,这实际上是一个报告,用于标记客户端的潜在错误,而不是此时实际更改任何数据。谢谢大家。太棒了,这很好,我完全忘了加入临时桌。还要感谢“NULL”的建议,在本例中,“NULL”是客户端的标志,而不是实际转换值。非常感谢你!不客气!如果“NULL”是一个标志,那么我真的建议在语句中使用不同的单词或短语,例如“Unique ID”和“Fail”。为客户提供更清晰的信息,这样您就不会遇到问题。