Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Вставка столбца в другую таблицу из темпоральной таблицы (MS SQL SERVER)

BuFF The Thumper Знаток (349), на голосовании 1 год назад
Необходимо изменить процедуру так, чтобы в таблицу [stocks] загружался ID_AR таким образом:
Если [дата остатков] и дата матрицы(date_from) равны, то вставляем ID_AR из нее, соединяя по id_sku и id_shop. Если дата остатков не соответствует дате матрицы (то есть дата раньше актуальной), то берем ID_AR из истории матрицы, соединяя по id_sku, id_shop и условию [дата остатков] between [date_from] и [date_то]. Если все равно возвращается нулл, берем ID из матрицы.
Структуры таблиц:
SELECT [Магазин]
,[SKU]
,[Ассортимент]
,[ID_SHOP]
,[ID_SKU]
,[ID_AR]
,[ЖЦ]
,[Цикл]
,[Страховой запас]
,[SYSMOMENT]
,[DATE_FROM]
,[DATE_TO]
FROM [matrix] (Такая же для [matrix_history])

SELECT TOP [Дата остатков]
,[ID_SHOP]
,[ID_SKU]
,[Стоимость]
,[Текущий остаток]
,[SYSMOMENT]
,[ID_STOCK]
,[Магазин]
,[SKU]
,[ID_ASSORTMENT]
FROM [stocks]
Оригинальная процедура:
ALTER PROCEDURE [sapbi].[stocksLoad]
AS

DELETE
FROM [stocks]
WHERE [Дата остатков] IN (SELECT DISTINCT CONVERT(date,[Дата остатков],4) FROM [stocksBUFFER])

INSERT INTO [sapbi].[stocks] ([Дата остатков], [ID_SHOP], [ID_SKU], [Cтоимость], [Текущий остаток],[ID_STOCK], [Магазин], [SKU])
SELECT CONVERT(date, [Дата остатков], 4),
ISNULL(t2.[ID_SHOP], 0),
ISNULL(t3.[ID_SKU], 0),
convert(float, NULLIF(REPLACE(REPLACE(t1.[Стоимость], CHAR(160),''), ' ', ''),'')) as [Стоимость],
convert(float, NULLIF(REPLACE(REPLACE(t1.[Текущий остаток], CHAR(160),''), ' ', ''),'')) as [Текущий остаток],
ISNULL(t4.[ID_STOCK], 0),
t1.[Магазин],
t1.[SKU]
FROM [stocksBUFFER] AS t1
LEFT JOIN [shops] AS t2 ON t1.[Магазин] = t2.[Магазин]
LEFT JOIN [sku] AS t3 ON t1.[SKU] = t3.[SKU]
LEFT JOIN [stocks] AS t4 ON t1.[Склад]=t4.[Склад] AND t2.[Магазин] = t4.[Магазин]
Голосование за лучший ответ
Похожие вопросы