SQL WHERE 子句 - 显示每 3 年数据的最佳方式

Posted

技术标签:

【中文标题】SQL WHERE 子句 - 显示每 3 年数据的最佳方式【英文标题】:SQL WHERE clause - best way to display data from every 3 years 【发布时间】:2021-12-31 18:42:16 【问题描述】:

我正在尝试找到以每 3 年为间隔(从执行报告/查询的年份计算)按雇用年份显示员工列表的最佳方式。例如,如果 2021 年是报告执行年份,那么它只会显示 2012 年、2015 年、2018 年等年份雇用的员工

下面的 WHERE 子句有效,但它很笨拙,我相信有更好的方法来增加年份,而无需使用添加 -6、-9 等的一长串 OR 语句

WHERE
  (EmployeesTable.[Hire Year] = @ExecutionYear -3)
  OR 
  (EmployeesTable.[Hire Year] = @ExecutionYear -6)
  OR
  (EmployeesTable.[Hire Year] = @ExecutionYear -9)

【问题讨论】:

【参考方案1】:

试试这个...

WHERE @ExecutionYear - EmployeesTable.[Hire Year] IN (3,6,9)

【讨论】:

当我运行查询时,会出现一个报表生成器弹出窗口——E​​xecutionYear 的“定义查询参数”(参数值为 ,数据类型为 Auto)。运行我的原始查询时,我没有得到这个。 ExecutionYear 参数基于报表生成器/s-s-rS 的“内置字段”,称为执行时间(使用 =Year(Globals!ExecutionTime) 表达式创建)而不是主数据集。这发生在您的建议和 Alan Schofield 的表达中。有什么想法吗? 更正——看起来查询/报告将为用户运行而没有问题。当我从查询设计器中运行定义框时,它只会为我弹出。 确保变量的拼写与 s-s-rS 参数名称完全相同,区分大小写。 无论如何,谢谢 - 您的原始答案有效。另一个问题我想我会去一个 s-s-rS 论坛。【参考方案2】:

使用模数怎么样?

where (EmployeesTable.[Hire Year] - @ExecutionYear) % 3 = 0

【讨论】:

当我运行查询时,会出现一个报表生成器弹出窗口——E​​xecutionYear 的“定义查询参数”(参数值为 ,数据类型为 Auto)。运行我的原始查询时我没有得到这个。 ExecutionYear 参数基于报表生成器/s-s-rS 的“内置字段”,称为执行时间(使用 =Year(Globals!ExecutionTime) 表达式创建)而不是主数据集。这发生在您的建议和 Alan Schofield 的表达中。有什么想法吗? 恐怕我没有任何建议,很遗憾无法进行测试/调试。我在 SSMS 中单独运行上述内容作为测试,它给出了预期的输出,但无法深入研究 s-s-rS。 无论如何,谢谢 - 您的原始答案有效。另一个问题我想我会去一个 s-s-rS 论坛。

以上是关于SQL WHERE 子句 - 显示每 3 年数据的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

3. SQL中的子句

SQL - 在 WHERE 子句中使用日期范围的结果集中未显示正确日期

过去 13 个完整月的 SQL WHERE 子句

如何在sql中创建动态where子句?

Oracle 到 SQL Server:月 + 年 where 子句

SQL之过滤数据(where子句)