根据SSRS中的日期查找详细信息

时间:2017-01-13 17:06:52

标签: date reporting-services

我有一个表格,用于提取SSRS中的订单详细信息,该详细信息在产品编号的价格发生变化时。它有数据更改和更新成本。

我正在配对两个不同的表来创建一个报告,该报告是订单时包裹的成本。以下是我提取数据的方法:

point

目录= ShippedOrders

ActPkgCostHist表具有物品的成本和成本的变化日期。

OrderHist Table除了购买时的ActPkgCost外,还有订单的完整详细信息。

我正在尝试创建一个表,其中包含订单号,订单日期和订单时的包装成本。

2 个答案:

答案 0 :(得分:0)

ROW_NUMBER函数对于这样的情况非常有用。

SELECT WAREHOUSE.ActPkgCostHist.ItemNo AS [ActPkgCostHist ItemNo]
  ,WAREHOUSE.ActPkgCostHist.ActPkgCostDate
  ,WAREHOUSE.ActPkgCostHist.ActPkgCost
  ,ORDER.OrderHist.OrderNo
  ,ORDER.OrderHist.ItemNo AS [OrderHist ItemNo]
  ,ORDER.OrderHist.DispenseDt
FROM ORDER.OrderHist
INNER JOIN (
  SELECT ItemNo, ActPkgCostDate, ActPkgCost
    , ROW_NUMBER() OVER (PARTITION BY ItemNo ORDER BY ActPkgCostDate DESC) as RN
  FROM WAREHOUSE.ActPkgCostHist
  --if there are future dated changes, limit ActPkgCostDate to be <= the current date
) ActPkgCostHist on ActPkgCostHist.ItemNo = OrderHist.ItemNo
WHERE RN = 1

此子查询的作用是按ItemNo对费用历史记录进行分组。然后对于每一个,它按新近度对更改进行排名,最近的更改为1.然后在主查询中将其过滤为只有1的行。

答案 1 :(得分:0)

对于每个订单中的每件商品,您必须找到最新的成本日期,并在加入成本表时使用它

&#13;
&#13;
SELECT C.ItemNo AS [ActPkgCostHist ItemNo], 
   C.ActPkgCostDate, 
   C.ActPkgCost, 
   O.OrderNo, 
   O.ItemNo AS [OrderHist ItemNo], 
   O.DispenseDt 
FROM   WAREHOUSE.ActPkgCostHist AS C 
   -- JOIN order detail with cost table in order to define the cost date per item/order
   INNER JOIN (SELECT Max(CH.ActPkgCostDate) AS ItemCostDate, 
                      OH.OrderNo, 
                      OH.ItemNo, 
                      OH.DispenseDt 
               FROM   WAREHOUSE.ActPkgCostHist AS CH 
                      INNER JOIN ORDER.OrderHist AS OH 
                              ON CH.ItemNo = OH.ItemNo 
               -- Get the latest cost date only from dates before order date
               WHERE  CH.ActPkgCostDate <= OH.DispenseDt 
               GROUP  BY OH.OrderNo, 
                         OH.ItemNo, 
                         OH.DispenseDt) AS O 
           ON C.ItemNo = O.ItemNo 
              AND C.ActPkgCostDate = O.ItemCostDate 
&#13;
&#13;
&#13;