我有包含1000多个行的数据,并且其中包含人们所犯的错误。我添加了一个额外的列,希望找到所有重复的Rev Name,并给第一个Rev Names赋予1,将所有其余的Rev Names赋予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,而是给他们全零。
谢谢大家,我在这里拔头发试图做到这一点。
答案 0 :(得分:2)
您可以在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
答案 1 :(得分:0)
SQL表表示无序集。除非有列指定顺序,否则没有任何“第一”。
您的逻辑建议lag()
:
select t.*,
(case when lag(revname) over (order by ??) = revname then 0
else 1
end) as is_duplicate
from t;
??
用于指定顺序的列。