Sql 当给定月份没有值时,如何使用特定月份的历史值?
我有两个SQL Server表 PurchaseOrderReceivingLine PORL是一个表,其中包含来自采购订单的每个收据。每个月有数百个条目 PartyRelationshipScore PRS是一个表,其中包含一个用于连接到PORL表的party-supplier参考号,关系和价格的分数为10分。它还有一个日期字段,用于记录分数更新的时间,因此我们有更新的历史记录 我想要实现的是每个月的供应商摘要。所以我会有供应商,TotalValue,LateParts等等。我很乐意为此创建代码。我所要做的是,如果给定月份没有值,那么就得到该月份的分数 例如,在8月1日,我的值可能是5。然后直到10月1日它增加到6时才改变。 在分组中,九月将有一个TotalValue&LateParts值,但由于PRS表中没有九月的记录,它将返回一个NULL值。我需要它来获取记录的最后一个值,并在本例中返回8月5日的值。所以它会回来Sql 当给定月份没有值时,如何使用特定月份的历史值?,sql,sql-server,Sql,Sql Server,我有两个SQL Server表 PurchaseOrderReceivingLine PORL是一个表,其中包含来自采购订单的每个收据。每个月有数百个条目 PartyRelationshipScore PRS是一个表,其中包含一个用于连接到PORL表的party-supplier参考号,关系和价格的分数为10分。它还有一个日期字段,用于记录分数更新的时间,因此我们有更新的历史记录 我想要实现的是每个月的供应商摘要。所以我会有供应商,TotalValue,LateParts等等。我很乐意为此创建代
Aug 2019 - 5
Sep 2019 - 5
Oct 2019 - 6
提前谢谢
波尔表
+-------+----------------+-------+-------+
| 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个月的relationshipscore和pricescore基于它,与第8个月相比没有变化。我认为这会有所帮助
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
请在问题中以文本表格的形式提供样本数据和所需结果。同时显示当前查询。第一步是在月份级别创建一个日历表。这是一个简单的月和年的列表,您可以通过外部连接来确保查询始终每月返回。@Nick.McDermaid我将从PORL表中获得每个月的记录。PRS表不一定有任何值,在这种情况下,它需要从上个月获取值。此时,如果您可以发布表DDL,包括唯一键和示例SQL语句,以及示例输入值和所需的results@dimaSUN这个很好用,谢谢。像尼克一样,我今天学到了一些新东西。