【问题标题】:SQL WHERE clause - best way to display data from every 3 yearsSQL WHERE 子句 - 显示每 3 年数据的最佳方式
【发布时间】: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)

【问题讨论】:

    标签: sql reporting-services


    【解决方案1】:

    试试这个...

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

    【讨论】:

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

    使用模数怎么样?

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

    【讨论】:

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