Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 скрипт на update  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
добрый день господа!!

помогите пожалуйста с запросом, мне необходимо создать скрипт на резервирование товара из таблицы @SKU, в таблице ячеек @LOCxSKU причем доступное количество это (QTY-QTYALLOCATED-QTYPICKED) с учетом сортировки по полю LOT. резервирование представляет собой обновление поля QTYALLOCATED = QTYALLOCATED + нужное количество GETQTY из таблицы @SKU. Если в строке не хватает единиц для резервирования то необходимо обработать последующий строку (order by lot)

DECLARE @SKU     TABLE (SKU VARCHAR(10), GETQTY INT)
DECLARE @LOCxSKU TABLE (LOC VARCHAR(11), SKU VARCHAR(10), LOT VARCHAR(10), QTY INT, QTYALLOCATED INT, QTYPICKED INT)
DECLARE @TEMP_SKU VARCHAR(10), @TEMP_QTY INT
INSERT INTO @SKU
SELECT 'KB001',300 UNION
SELECT 'KB002',150 UNION
SELECT 'KB003',80 

INSERT INTO @LOCxSKU
SELECT 'A01.01.01.1','KB001','000001',250,50,0  UNION
SELECT 'A01.01.02.1','KB001','000002',110,0,0   UNION

SELECT 'A01.01.04.1','KB002','000008',250,200,0 UNION
SELECT 'A01.01.04.2','KB002','000009',110,0,0   UNION
SELECT 'A01.01.04.3','KB002','000006',100,10,0  UNION
SELECT 'A01.01.04.4','KB002','000007',80,50,0   UNION

SELECT 'A01.01.04.1','KB003','000011',100,100,0 UNION
SELECT 'A01.01.04.2','KB003','000012',50,50,0   UNION
SELECT 'A01.01.04.3','KB003','000013',100,90,0  UNION
SELECT 'A01.01.04.4','KB003','000014',80,70,0   

SELECT SKU, GETQTY INTO #SORCE FROM @SKU

WHILE EXISTS (SELECT TOP 1 SKU FROM #SORCE)
BEGIN
       SELECT @TEMP_SKU = SKU, @TEMP_QTY = GETQTY FROM #SORCE
       --
       -- ТУТ ЗАГЛОСТКА ДЛЯ UPDATE
       --
       DELETE #SORCE WHERE SKU = @TEMP_SKU
END
----
DROP TABLE #SORCE


желаемый результат:

DECLARE @LOCxSKU TABLE (LOC VARCHAR(11), SKU VARCHAR(10), LOT VARCHAR(10), QTY INT, QTYALLOCATED INT, QTYPICKED INT)
INSERT INTO @LOCxSKU
SELECT 'A01.01.01.1','KB001','000001',250,250,0  UNION
SELECT 'A01.01.02.1','KB001','000002',110,100,0   UNION

SELECT 'A01.01.04.1','KB002','000008',250,230,0 UNION
SELECT 'A01.01.04.2','KB002','000009',110,0,0   UNION
SELECT 'A01.01.04.3','KB002','000006',100,100,0  UNION
SELECT 'A01.01.04.4','KB002','000007',80,80,0   UNION

SELECT 'A01.01.04.1','KB003','000011',100,100,0 UNION
SELECT 'A01.01.04.2','KB003','000012',50,50,0   UNION
SELECT 'A01.01.04.3','KB003','000013',100,100,0  UNION
SELECT 'A01.01.04.4','KB003','000014',80,80,0  

SELECT * FROM @LOCxSKU

ЗАРАНЕЕ ВСЕМ СПАСИБО!! SQL SERVER 2005
30 апр 14, 10:15    [15956462]     Ответить | Цитировать Сообщить модератору
 Re: скрипт на update  [new]
DmitryVT
Member

Откуда: VRN
Сообщений: 192
решил таким образом:
DECLARE @SKU     TABLE (SKU VARCHAR(10), GETQTY INT, UPDQTY INT)
DECLARE @LOCxSKU TABLE (LOC VARCHAR(11), SKU VARCHAR(10), LOT VARCHAR(10), QTY INT, QTYALLOCATED INT, QTYPICKED INT)
DECLARE @TEMP_SKU VARCHAR(10), @TEMP_QTY INT, @UPD_QTY INT, @UPD_LOC VARCHAR(11)
------------------------------------------------------
INSERT INTO @SKU
SELECT 'KB001',300,0 UNION
SELECT 'KB002',150,0 UNION
SELECT 'KB003',80 ,0

INSERT INTO @LOCxSKU
SELECT 'A01.01.01.1','KB001','L000001',250,50,0  UNION
SELECT 'A01.01.02.1','KB001','L000002',110,0,0   UNION

SELECT 'A01.01.04.1','KB002','L000008',250,200,0 UNION
SELECT 'A01.01.04.2','KB002','L000009',110,0,0   UNION
SELECT 'A01.01.04.3','KB002','L000006',100,10,0  UNION
SELECT 'A01.01.04.4','KB002','L000007',80,50,0   UNION

SELECT 'A01.01.04.1','KB003','L000011',100,100,0 UNION
SELECT 'A01.01.04.2','KB003','L000012',50,50,0   UNION
SELECT 'A01.01.04.3','KB003','L000013',100,90,0  UNION
SELECT 'A01.01.04.4','KB003','L000014',80,70,0   

------------------------------------------------------
SELECT SKU, GETQTY INTO #SORCE FROM @SKU

WHILE EXISTS (SELECT TOP 1 SKU FROM #SORCE)
BEGIN
       SELECT @TEMP_SKU = SKU, @TEMP_QTY = GETQTY FROM #SORCE

         WHILE (EXISTS (SELECT TOP 1 LOC FROM @LOCxSKU WHERE (QTY-QTYALLOCATED-QTYPICKED) > 0 AND SKU = @TEMP_SKU ORDER BY LOT))
            AND (@TEMP_QTY > 0)
            BEGIN
                SELECT TOP 1 @UPD_QTY = (QTY-QTYALLOCATED-QTYPICKED), @UPD_LOC = LOC FROM @LOCxSKU WHERE (QTY-QTYALLOCATED-QTYPICKED) > 0 AND SKU = @TEMP_SKU ORDER BY LOT
                UPDATE @LOCxSKU SET QTYALLOCATED = (CASE WHEN @UPD_QTY <= @TEMP_QTY THEN QTYALLOCATED+@UPD_QTY ELSE QTYALLOCATED+@TEMP_QTY END) WHERE LOC = @UPD_LOC AND SKU = @TEMP_SKU
                SET @TEMP_QTY =@TEMP_QTY - @UPD_QTY                
            END 
       UPDATE @SKU SET UPDQTY = (CASE WHEN @TEMP_QTY > 0 THEN GETQTY - @TEMP_QTY ELSE GETQTY END) WHERE SKU = @TEMP_SKU
       DELETE #SORCE WHERE SKU = @TEMP_SKU
END
----
DROP TABLE #SORCE

SELECT * FROM @LOCxSKU ORDER BY LOT
SELECT * FROM @SKU
30 апр 14, 12:55    [15957791]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить