如何基于重复值在SQL中使用行Num()

时间:2019-05-20 08:12:08

标签: sql sql-server

在Sql中,我基于Ite和Rev获取以下数据,它计算行num

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次

请帮助或任何建议。

2 个答案:

答案 0 :(得分:0)

很简单,将窗口函数的分区更改为partition by Rev, Ite

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

我希望它能解决问题

答案 1 :(得分:0)

我想你想要

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