sql-server - 返回当前和上一年的记录,其中年份在 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 子句,除非有人有其他建议。
解决方案
为什么需要 2 个视图?
更好的方法是创建带有列的单个视图:
InventoryID, FinYear, CurrentYearTotalSales, PreviousYearTotalSales, TotalSales
我认为你出错的地方是你必须使用SELCT * FROM ...
. 事实上,这是一种糟糕的方法,最好将列显式声明为:
SELECT InventoryID, FinYear, TotalSales FROM INForecastTotalSales
或者
SELECT InventoryID, FinYear, CurrentYearTotalSales, PreviousYearTotalSales FROM INForecastTotalSales
这可能会简化您的视图创建,并使您的查询更加健壮。
推荐阅读
- java - GALLERY_PICK 选项不在 startActivityForResult 参数中
- javascript - 在 React Redux 的输入字段中渲染状态值,使值不可更改
- javascript - 什么是 hexo 中的 `__()`(双下划线)函数?
- php - 从表中删除以 < 开头的所有记录
- php - 如何编写sql查询以显示带有结束日期列的特定时间段的任务提醒?
- php - 使用密码字段验证编辑配置文件
- compiler-construction - 将 SSA 转换为堆栈机
- python - Pandas/Python/Dropna:在 dropna 发生后重命名标题列名称以导入 MySQL
- django - ImportError:没有名为“django_select2”的模块
- javascript - 为什么是静态类