我正在尝试检查重复值,作为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
答案 0 :(得分:1)
如果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。