如何为具有相同值的结果添加自定义递增计数器?
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"
我有以下 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"