Как мне добавить пользовательский счетчик увеличения для результатов с тем же значением?

#sql-server #counter #increment

#sql-server #счетчик #увеличить

Вопрос:

У меня есть следующий запрос MySQL для переименования файлов из определенного местоположения :

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

Который дает мне следующие результаты, и это нормально:

 copy "S:Cimage1.eps"  |  "C:EPS1234 ().eps"
copy "S:Cimage2.eps"  |  "C:EPS1234 ().eps"
copy "S:Cimage3.eps"  |  "C:EPS1234 ().eps"
copy "S:Cimage4.eps"  |  "C:EPS1234 ().eps"
copy "S:Cimage5.eps"  |  "C:EPS6789 ().eps"
copy "S:Cimage6.eps"  |  "C:EPS6789 ().eps"
  

Как мне добавить пользовательский счетчик для каждого соответствующего значения, чтобы получить следующие результаты?

 copy "S:Cimage1.eps"  |  "C:EPS1234 (1).eps"
copy "S:Cimage2.eps"  |  "C:EPS1234 (2).eps"
copy "S:Cimage3.eps"  |  "C:EPS1234 (3).eps"
copy "S:Cimage4.eps"  |  "C:EPS1234 (4).eps"
copy "S:Cimage5.eps"  |  "C:EPS6789 (1).eps"
copy "S:Cimage6.eps"  |  "C:EPS6789 (2).eps"
  

Комментарии:

1. Вы уверены, что отметили правильную базу данных? Этот код не похож на MySQL.

2. MySQL не может складывать строки, так что это не MySQL, а если и есть, то он неисправен.

3. Я заверяю, что запрос выполняется отлично и является MySQL. Мне просто нужно знать, как добавить счетчик, чтобы каждое значение могло иметь уникальное значение, и оно должно быть в числовом порядке.

4. Это абсолютно не MySQL. Вам нужно CONCAT(...) с MySQL, как 'x' '.eps' в MySQL 0 , так как это делает математику на нем. Скорее всего, это Microsoft SQL Server, который является совершенно другим диалектом.

Ответ №1:

Имеющийся у вас код выглядит как SQL Server, поэтому используйте 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');
  

Смотрите демонстрацию.
Результаты:

 copy "S:Cimage1.eps"  |  "C:EPS1234 (1).eps"
copy "S:Cimage2.eps"  |  "C:EPS1234 (2).eps"
copy "S:Cimage3.eps"  |  "C:EPS1234 (3).eps"
copy "S:Cimage4.eps"  |  "C:EPS1234 (4).eps"
copy "S:Cimage5.eps"  |  "C:EPS6789 (1).eps"
copy "S:Cimage6.eps"  |  "C:EPS6789 (2).eps"
  

Комментарии:

1. Большое вам спасибо, это сработало отлично. Приносим извинения за путаницу с MySQL и SQL Server.

2. @blinkknot вы могли бы устранить путаницу, отредактировав теги в вашем вопросе.