Как использовать историческое значение за определенный месяц, если для данного месяца нет значений? - PullRequest
0 голосов
/ 07 октября 2019

У меня есть 2 таблицы SQL Server.

PurchaseOrderReceivingLine (PORL) - таблица, содержащая каждый чек из заказа на покупку. Он содержит сотни записей в месяц.

PartyRelationshipScore (PRS) - это таблица со ссылочным номером участника (поставщика) (который используется для присоединения к таблице PORL) и 10 баллами для отношенияи цена. В нем также есть поле date, когда обновляется счет, поэтому у нас есть история обновлений.

Я хочу получить сводную информацию о поставщиках за каждый месяц. Так что у меня был бы Поставщик #, TotalValue, LateParts и т. Д. Я в порядке с созданием кода для этого. То, с чем я борюсь, это получение оценки за данный месяц, если для этого месяца нет значений.

Так, например, у меня может быть значение 5 на 1 августа. Тогда он не изменится до 1 октября, когда он будет увеличен до 6. В группе сентябрь будет иметь значение TotalValue & LateParts, но, поскольку в таблице PRS в сентябре нет записей, он вернет NULLстоимость. Мне нужно, чтобы получить последнее записанное значение и вернуть его (в данном случае 5 августа). Так что он вернется;

Aug 2019 - 5
Sep 2019 - 5
Oct 2019 - 6

Заранее спасибо.

Таблица PORL

+-------+----------------+-------+-------+
| PORL# |   Date (UK)    | Value | Party |
+-------+----------------+-------+-------+
|     1 | 1/8/2019       |   100 |     6 |
|     2 | 1/8/2019       |   250 |     6 |
|     3 | 1/9/2019       |  1000 |     6 |
|     4 | 1/10/2019      |  2000 |     6 |
+-------+----------------+-------+-------+

Таблица PRS

+-------------+------------+-------------------+------------+
| DateChanged (UK) | Party | RelationShipScore | PriceScore |
+-------------+------------+-------------------+------------+
| 1/8/2019         |     6 |                 5 |          5 |
| 1/10/2019        |     6 |                 6 |          7 |
+------------------+-------+-------------------+------------+

Предпочтительный результат

+----------+-------+------+------------+-------------------+------------+
| Supplier | Month | Year | TotalValue | RelationshipScore | PriceScore |
+----------+-------+------+------------+-------------------+------------+
|        6 |     8 | 2019 |        350 |                 5 |          5 |
|        6 |     9 | 2019 |       1000 |                 5 |          5 |
|        6 |    10 | 2019 |       2000 |                 6 |          7 |
+----------+-------+------+------------+-------------------+------------+

Показатели отношений и цен за 9-й месяц основаны на том, что они не меняются с 8-го месяца.

1 Ответ

1 голос
/ 07 октября 2019

Я думаю, что это помогает

select Supplier = T.Party
     , Month = DATEPART(MONTH,T.[Date])
     , Year = DATEPART(YEAR,T.[Date])
     , T.TotalValue
     , R.RelationShipScore
     , R.PriceScore
from (  Select P.[Party],P.[Date],[TotalValue] = sum(P.[Value])
        from PurchaseOrderReceivingLine P
        group by P.[Party],P.[Date] ) T
outer apply ( select top 1  RelationShipScore , PriceScore 
              from PartyRelationshipScore
              where Party = T.Party 
              and DateChanged <= T.[Date]
              Order by DateChanged desc ) R
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...