【问题标题】:How do I add a custom incrementing counter for results with the same value?如何为具有相同值的结果添加自定义递增计数器?
【发布时间】:2021-01-01 22:33:33
【问题描述】:

我有以下 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:\EPS\1234 ().eps"
copy "S:\C\image2.eps"  |  "C:\EPS\1234 ().eps"
copy "S:\C\image3.eps"  |  "C:\EPS\1234 ().eps"
copy "S:\C\image4.eps"  |  "C:\EPS\1234 ().eps"
copy "S:\C\image5.eps"  |  "C:\EPS\6789 ().eps"
copy "S:\C\image6.eps"  |  "C:\EPS\6789 ().eps"

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

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

【问题讨论】:

  • 您确定您标记了正确的数据库吗?这段代码看起来不像 MySql。
  • MySQL 不能将字符串加在一起,所以这不是 MySQL,如果是的话,它就坏了。
  • 我保证查询运行良好并且是 MySql。我只需要知道如何添加一个计数器,以便每个值都可以有一个唯一的值,并且它必须按数字顺序排列。
  • 这绝对不是 MySQL。你需要 CONCAT(...) 和 MySQL,因为 MySQL 中的 'x' + '.eps'0,因为这是在做数学运算。这很可能是 Microsoft SQL Server,这是一种完全不同的方言。

标签: sql-server counter increment


【解决方案1】:

你的代码看起来像 SQL Server,所以使用ROW_NUMBER()窗口函数:

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:\EPS\1234 (1).eps"
copy "S:\C\image2.eps"  |  "C:\EPS\1234 (2).eps"
copy "S:\C\image3.eps"  |  "C:\EPS\1234 (3).eps"
copy "S:\C\image4.eps"  |  "C:\EPS\1234 (4).eps"
copy "S:\C\image5.eps"  |  "C:\EPS\6789 (1).eps"
copy "S:\C\image6.eps"  |  "C:\EPS\6789 (2).eps"

【讨论】:

  • 非常感谢,它运行良好。对于与 MySQL 和 SQL Server 的混淆,我们深表歉意。
  • @blinkknot 您可以通过编辑问题上的标签来消除混淆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2021-06-07
相关资源
最近更新 更多