#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'
в MySQL0
, так как это делает математику на нем. Скорее всего, это 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 вы могли бы устранить путаницу, отредактировав теги в вашем вопросе.