如何为具有相同值的结果添加自定义递增计数器?

How do I add a custom incrementing counter for results with the same value?

我有以下 MySQL 从特定位置重命名文件的查询:

SELECT REPLACE('copy "S:' + RIGHT(Path, LEN(Path) - 10) + '.eps" ','/','\'),' "C:\EPS\' + barcode + ' ().eps"'
FROM product 
WHERE barcode IN ('1234','6789);

这给了我以下结果,很好:

copy "S:\C\image1.eps"  |  "C:\EPS34 ().eps"
copy "S:\C\image2.eps"  |  "C:\EPS34 ().eps"
copy "S:\C\image3.eps"  |  "C:\EPS34 ().eps"
copy "S:\C\image4.eps"  |  "C:\EPS34 ().eps"
copy "S:\C\image5.eps"  |  "C:\EPS89 ().eps"
copy "S:\C\image6.eps"  |  "C:\EPS89 ().eps"

如何为每个匹配值添加自定义计数器以获得以下结果?

copy "S:\C\image1.eps"  |  "C:\EPS34 (1).eps"
copy "S:\C\image2.eps"  |  "C:\EPS34 (2).eps"
copy "S:\C\image3.eps"  |  "C:\EPS34 (3).eps"
copy "S:\C\image4.eps"  |  "C:\EPS34 (4).eps"
copy "S:\C\image5.eps"  |  "C:\EPS89 (1).eps"
copy "S:\C\image6.eps"  |  "C:\EPS89 (2).eps"

你的代码看起来像 SQL 服务器,所以使用 ROW_NUMBER() window 函数:

SELECT REPLACE('copy "S:' + RIGHT(Path, LEN(Path) - 10) + '.eps" ','/','\'),
       '"C:\EPS\' + barcode + ' (' + 
       CAST(ROW_NUMBER() OVER (PARTITION BY barcode ORDER BY Path) AS VARCHAR(10))
       +').eps"'
FROM product 
WHERE barcode IN ('1234','6789');

参见demo
结果:

copy "S:\C\image1.eps"  |  "C:\EPS34 (1).eps"
copy "S:\C\image2.eps"  |  "C:\EPS34 (2).eps"
copy "S:\C\image3.eps"  |  "C:\EPS34 (3).eps"
copy "S:\C\image4.eps"  |  "C:\EPS34 (4).eps"
copy "S:\C\image5.eps"  |  "C:\EPS89 (1).eps"
copy "S:\C\image6.eps"  |  "C:\EPS89 (2).eps"