在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次
请帮助或任何建议。
答案 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;