我有包含 1000 多行的数据,其中包含人们犯的错误。我添加了一个额外的列,并希望找到所有重复的 Rev 名称,并将第一个名称指定为 1,将所有剩余的重复名称指定为 0。当没有重复项时,它应该为 1。结果应如下所示:
RevName ErrorCount Duplicate
Rev5588 23 1
Rev5588 67 0
Rev5588 7 0
Rev5588 45 0
Rev7895 6 1
Rev9065 4 1
Rev5588 1 1
我已经尝试过 CASE WHEN 但它没有给第一个 1,而是给它们全部为零。
您可以在
case
窗口函数上使用 row_number
表达式:
SELECT RevName,
Duplicate,
CASE ROW_NUMER() OVER (PARTITION BY RevName
ORDER BY (SELECT 1)) WHEN 1 THEN 1 ELSE 0 END AS Duplicate
FROM mytable
SQL 表代表无序集。 任何事物都没有“第一”,除非列指定了顺序。
你的逻辑表明
lag()
:
select t.*,
(case when lag(revname) over (order by ??) = revname then 0
else 1
end) as is_duplicate
from t;
??
用于指定顺序的列。