2017-06-14 44 views
1

我有一个要求来设置每个文档类型的出现次数并根据文档名称进行排序。任何机会在MS SQL 2008如何做到这一点?在SQL中设置事件

这里的情景:

  1. 如果文档类型是独一无二的,更新文件名的出现次数为001
  2. 如果文档类型是不是唯一的,检查了6最后一位文档名称的权利,并将其与具有相同文档类型的其他文档名称进行比较。请根据预期产出查看当前表格。

当前表。

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 
+1

正在使用的是何种RDBMS? –

+0

我正在使用MS SQL 2008. – yope

回答

1

如果我理解正确的,你想row_number()

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

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

编辑:

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

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; 
+0

你好,这不是行号。但我需要根据文档类型和文档名称设置出现次数。 – yope

+0

好吧,那可行!谢谢! – yope

+0

如何在row_number()的前缀上添加00?我尝试了'00'+ row_number()但不起作用。 – yope