首页 > 解决方案 > 返回当前和上一年的记录,其中年份在 Acumatica 报告的 WHERE 子句中传递

问题描述

假设我有一个名为 INForecastTotalSales 的 SQL 视图。此视图包含以下列:

InventoryID、FinYear、TotalSales

我想创建另一个视图 INForecastTotalSalePrevCurr,它将具有以下列:

InventoryID、FinYear、CurrentYearTotalSales、PreviousYearTotalSales

这样当我查询 SELECT * FROM INForecastTotalSalePrevCurr i WHERE i.FinYear = 2020 视图时,将分别使用 2020 年和 2019 年的 TotalSales 数据填充 CurrentYearTotalSales、PreviousYearTotalSales。如果我们必须加入原始视图本身,那么它必须是 FULL OUTER JOIN,因为我们需要来自两个表的所有库存 id 的数据。

我尝试使用 OUTER APPLY 并将相同的视图放入表值函数中,但这基本上可以作为 LEFT JOIN 工作。

该视图必须在 Acumatica Report 中使用,因此如果我要使用函数或存储过程,则无法真正传递参数。我仅限于使用 WHERE 子句,除非有人有其他建议。

标签: sql-servertsqlacumatica

解决方案


为什么需要 2 个视图?

更好的方法是创建带有列的单个视图:

InventoryID, FinYear, CurrentYearTotalSales, PreviousYearTotalSales, TotalSales

我认为你出错的地方是你必须使用SELCT * FROM .... 事实上,这是一种糟糕的方法,最好将列显式声明为:

SELECT InventoryID, FinYear, TotalSales FROM INForecastTotalSales
或者
SELECT InventoryID, FinYear, CurrentYearTotalSales, PreviousYearTotalSales FROM INForecastTotalSales

这可能会简化您的视图创建,并使您的查询更加健壮。


推荐阅读