2016-03-12 22 views
0

我有一个约90 000个产品和约2000个供应商的列表。每个产品都应该得到一个唯一的产品代码,我们公司以这种格式来做到这一点:First 2 letters of the suppliers name, 5 digit suppliers number and a 5 digit product number in that group. 我需要能够在sql(首选项:MS ACCESS 2013)或SQL Server中执行此操作。在表中的组中的序列号

下面是我想:

product_code  suppliers_code  suppliers_name  product_name 
PA0009100001  00091    Pardaen NV   product 1 
PA0009100002  00091    Pardaen NV   product BB 
PA0009100003  00091    Pardaen NV   product CC 
HU1007300001  10073    Husqverma   product 2 
WI6703300001  67033    Willy Lamot  product 3 

谢谢。

回答

1

你可以使用ROW_NUMBER

SELECT *, 
     [product_code] = CONCAT(LEFT(suppliers_name,2), suppliers_code, 
           RIGHT('0000' + CAST(rn AS VARCHAR(5)),5)) 
FROM (SELECT *, 
      rn = ROW_NUMBER() OVER(PARTITION BY suppliers_code ORDER BY product_name) 
     FROM table_name) AS sub; 

如果您正在使用的版本低于SQL Server 2012使用+来连接字符串。

LiveDemo

+1

吹毛求疵:'ROW_NUMBER()'可用形式MS SQL-Server 2008中,未在2012年 – Mureinik

+1

但CONCAT为2012+ – Squirrel

+0

此解决方案是否也适用于ms访问? –

0

在Access中您可以使用:

Select 
    UCase(Left([suppliers_name], 2)) & [suppliers_code] & 
     Format((Select Count(*) From YourTable As T 
      Where T.suppliers_name = YourTable.suppliers_name 
      And T.suppliers_code = YourTable.suppliers_code 
      And T.product_code >= YourTable.product_name), "00000") 
     As [product_name] 
From 
    YourTable 
+0

它不起作用.. product_code不是一个数字,它是其他字段的组合 –

+0

嗯,当然,请参阅编辑。 – Gustav