SQL Server: возврат стоимости на основе диапазона дат между 2 таблицами - PullRequest
0 голосов
/ 19 января 2019

У меня есть 2 таблицы, одна для операций с запасами и одна для истории стандартных затрат.Я пытаюсь получить стандарт из таблицы затрат, используя даты, чтобы определить, какой стандарт выбрать между двумя таблицами.

В качестве примера:

ProductID   Trans.Date
-----------------------
P001        12/26/2017
P001        10/8/2018
P001        12/17/2018
P001        1/2/2019

ItemID  EffectiveDate   Standard
---------------------------------
P001    12/23/2017         50
P001    12/31/2018         52
P002    12/23/2017        100
P002    12/31/2018        103

Мой подзапрос:

(SELECT 
     SUM(c305.t_tvat_1)
 FROM 
     tticpr305100 c305      
 WHERE 
     c305.t_item = w112.t_item 
     AND c305.t_indt <= w112.t_trdt) AS 'STD.COST'

Где tvat_1 - общая стоимость материалов, рабочей силы и других затрат, иt_item = PRODUCT ID

То, что я хочу увидеть:

ProductID   Trans.Date  STD_Cost
---------------------------------
P001        12/26/2017     50
P001        10/8/2018      50
P001        12/17/2018     50
P001        1/2/2019       52

То, что я вижу:

ProductID   Trans.Date  STD_Cost
---------------------------------
P001        12/26/2017     50
P001        10/8/2018      50
P001        12/17/2018     50
P001        1/2/2019      102

1 Ответ

0 голосов
/ 19 января 2019

Один из вариантов: CROSS APPLY

Не уверен, если имя столбца [Trans.Date] или [Date] в таблице транс.

В приведенном ниже примере T1Ваша первая таблица отображается, а T2 - вторая отображаемая таблица.

Пример dbFiddle

Select A.*
      ,STD_Cost = B.Standard
 From  T1 A
 Cross Apply (
              Select Top 1 *
               From  T2
               Where TemID=A.ProductID and EffectiveDate<=[Trans.Date]
               Order By EffectiveDate Desc
             ) B

Возвращает

ProductID   Trans.Date  STD_Cost
P001        2017-12-26  50.00
P001        2018-10-08  50.00
P001        2018-12-17  50.00
P001        2019-01-02  52.00

Примечание: Используйте OUTER APPLY, если хотите увидеть значения NULL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...