首页 > 解决方案 > 如何根据重复值在sql中使用row Num()

问题描述

在 Sql 中,我有基于 Ite 和 Rev 的以下数据,它计算行数

Folder  FileName    VersionId   DocumentID  DocumentVersion Rev Ite Duplicate
\\abc\\ abc.sldprt  V1  D00001  1   A   1   1
\\abc\\ abc.sldprt  V12 D00001  12  A   1   2
\\abc\\ abc.sldprt  V2  D00001  2   B   1   1
\\abc\\ abc.sldprt  V3  D00001  3   B   2   2
\\abc\\ abc.sldprt  V4  D00001  4   B   3   3
\\abc\\ abc.sldprt  V5  D00001  5   C   1   1
\\abc\\ abc.sldprt  V6  D00001  6   C   2   2
\\abc\\ abc.sldprt  V7  D00001  7   C   3   3
\\abc\\ abc.sldprt  V8  D00001  8   C   4   4
\\abc\\ abc.sldprt  V9  D00001  9   D   1   1
\\abc\\ abc.sldprt  V10 D00001  10  D   2   2
\\abc\\ abc.sldprt  V11 D00001  11  E   1   1

我使用下面的查询来生成这个表。

select * , 
       ROW_NUMBER() OVER (PARTITION BY Folder, DocumentID, Rev order by Rev, Ite) As "Duplicate"
from Versions v1;

有什么方法可以计算,如果 Rev 和 Ite 相同,那么只增加行号让我们说 1、2、3,如果 Rev 和 Ite 是唯一的,它只会分配 1,所以我得到基于 Rev 和 Ite 的重复计数。

所需的输出看起来像

 Folder FileName    VersionId   DocumentID  DocumentVersion Rev Ite Duplicate
    \\abc\\ abc.sldprt  V1  D00001  1   A   1   1
    \\abc\\ abc.sldprt  V12 D00001  12  A   1   2
    \\abc\\ abc.sldprt  V2  D00001  2   B   1   1
    \\abc\\ abc.sldprt  V3  D00001  3   B   2   1
    \\abc\\ abc.sldprt  V4  D00001  4   B   3   1
    \\abc\\ abc.sldprt  V5  D00001  5   C   1   1
    \\abc\\ abc.sldprt  V6  D00001  6   C   2   1
    \\abc\\ abc.sldprt  V7  D00001  7   C   3   1
    \\abc\\ abc.sldprt  V8  D00001  8   C   4   1
    \\abc\\ abc.sldprt  V9  D00001  9   D   1   1
    \\abc\\ abc.sldprt  V10 D00001  10  D   2   1
    \\abc\\ abc.sldprt  V11 D00001  11  E   1   1

所以这里 A 1 重复 2 次

请帮助或任何建议。

标签: sqlsql-server

解决方案


我想你想要:

select v.* , 
       row_number() over (partition by Folder, DocumentID, Rev, Ite 
                          order by versionId
                         ) As Duplicate
from Versions v;

推荐阅读