#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть вывод набора записей из SQL, который я хочу использовать в нашем производстве, где я хочу идентифицировать каждый производственный заказ (prodid) с номером партии на основе определенного размера партии.
Примерные данные (здесь каждый производственный заказ содержит один элемент, но это может быть X элементов на производственный заказ):
SET nocount ON
DECLARE @FirstTable TABLE (ProdId NVARCHAR(10), ItemID NVARCHAR(10))
DECLARE @ii INT
SET @ii = 1
WHILE @ii < 50
BEGIN
INSERT INTO @FirstTable
VALUES ('P' convert(varchar(10),@ii), 'I' convert(varchar(10),@ii * 10))
SET @ii = @ii 1
END
SELECT * FROM @FirstTable
Если, например, размер партии равен 3, я хочу иметь партии с 3 производственными заказами в каждой партии, мой требуемый результат:
Если, например, размер партии равен 4, я хочу иметь партии с 4 производственными заказами в каждой партии, мой требуемый результат:
Конечно, в большинстве случаев размер последнего пакета будет меньше размера пакета. Кто-нибудь может сказать мне, как это сделать в SQL?
Комментарии:
1. Можете ли вы предоставить входные данные, потому что я не понимаю, откуда появляется ItemId, и я также не смог определить желаемую логику.
2. Спасибо, Сабхари, отредактировано..
Ответ №1:
используется dense_rank()
для генерации последовательности no by ProdId
. После этого используйте следующее выражение (SeqNo - 1) / @batch_size 1
для получения вашего BatchId
select *,
BatchId = (SeqNo - 1) / @batch_size 1
from
(
select *,
SeqNo = dense_rank() over (order by ProdId)
from yourtable
) d
Комментарии:
1. Отлично! Спасибо, белка на миллион, ты спасатель 🙂