在 SQL 中设置出现次数

Set occurrences in SQL

我有一个需求,设置每个文档类型的出现次数,并按照文档名称排序。关于如何在 MS SQL 2008 中执行此操作的任何机会?

场景如下:

  1. 如果文档类型是唯一的,则将该文档名称的出现次数更新为 001。
  2. 如果文档类型不是唯一的,请检查文档名称右侧的最后 6 位数字,并将其与具有相同文档类型的其他文档名称进行比较。请对照预期输出查看当前 table。

当前 Table.

EE. Number   DocumentType    Document name                 
406453       Transfer        ITransfers 20170531 154323    
406453       Offer Letter    Amendments 20170601 092848            
406453       Offer Letter    Amendments 20170601 092500    
406433       Misc            Misc. 20170531 153348 
406453       Offer Letter    Amendments 20170601 092735 

预期输出

EE. Number   DocumentType    Document name                 occurrence number
406453       Transfer        ITransfers 20170531 154323    001
406433       Misc            Misc. 20170531 153348         001
406453       Offer Letter    Amendments 20170601 092735    001
406453       Offer Letter    Amendments 20170601 092848    002
406453       Offer Letter    Amendments 20170601 092500    003

如果我没理解错的话,你想要row_number():

select t.*,
       row_number() over (partition by document_type
                          order by right(document_name, 6)
                         ) as occurrence_number
from t;

这 returns 是一个整数,而不是前导零的字符串。您可以将任何数据库中的数字转换为字符串;确切的功能取决于您使用的数据库。

编辑:

您可以将其转换为左填充字符串:

select t.*,
       right('000' + 
             cast(row_number() over (partition by document_type
                                     order by right(document_name, 6)
                                    ) as varchar(255)
                 ) as occurrence_number
from t;