【发布时间】:2016-12-13 11:01:38
【问题描述】:
是否有更有效的方法来为 SSRS 报告创建 SQL 查询,根据参数值,它会返回针对日期字段过滤的记录:1 = 没有结束日期的所有行 2 = 结束日期为 3 的所有行= 所有行,无论参数值如何。我提出了以下查询,但使用布尔值,它需要一个 or 语句为每个条件重复(我必须添加更多条件!
我遇到的另一个问题/问题是在使用 IF 或 CASE 时 - 我收到一条错误消息,指出 sclar 变量无效。当我声明并使用默认值设置参数时,它可以工作。但不确定 CASE/IF 在这种情况下是否理想?谢谢。
SELECT table.field_seq_no, table.field_end_dt, MyTable2.area_off
FROM table
INNER JOIN MyTable2
ON table.comp_id = MyTable2.comp_id
AND table.prty_ref = MyTable2.prty_id
WHERE ((table.field_end_dt IS NULL)
AND (@Parameter = 1)
AND (MyTable2.area_off IN (@area))
OR ((table.field_end_dt IS NOT NULL)
AND (@Parameter = 2)
AND (MyTable2.area_off IN (@area))
OR ((@Parameter = 3) AND (MyTable2.area_off IN (@area))
【问题讨论】:
-
在 where 子句中使用 case 表达式通常是个坏主意。 (难以优化等)
-
就个人而言,我会将其移至 SSRS 中的表达式并使用
switch(Parameters!Parameter1.Value = 1, <SQL1>, Parameters!Parameter1.Value = 2, <SQL2>, Parameters!Parameter1.Value = 3, <SQL3>)
标签: sql sql-server reporting-services parameters