给第一个副本一个1,其余的给0

时间:2018-06-25 17:01:05

标签: sql sql-server

我有包含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,而是给他们全零。

谢谢大家,我在这里拔头发试图做到这一点。

2 个答案:

答案 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;

??用于指定顺序的列。