给第一个重复的1,其余的0

问题描述 投票:0回答:2

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

sql sql-server select duplicates
2个回答
3
投票

您可以在

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

0
投票

SQL 表代表无序集。 任何事物都没有“第一”,除非列指定了顺序。

你的逻辑表明

lag()

select t.*,
       (case when lag(revname) over (order by ??) = revname then 0
             else 1
        end) as is_duplicate
from t;

??
用于指定顺序的列。

© www.soinside.com 2019 - 2024. All rights reserved.