Необходимо изменить процедуру так, чтобы в таблицу [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.[Магазин]
Если [дата остатков] и дата матрицы(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.[Магазин]