2009-05-21 79 views
2

我有一份需要显示来自不同位置或所有位置的会计数据的报告。SSRS 2008查询参数

Table_sales:

PartId Rev  LocId 
1   $10  1 
2   $2  1 
3   $5  2 

比方说查询是这样一些基本的东西来获取所有收入:

SELECT SUM(rev) FROM Table_sales 

如果我希望能够报告限制到特定的位置我会必须将其更改为:

SELECT SUM(Rev) FROM Table_sales WHERE LocId = @param 

但是,如果我这样做,我将如何获得所有位置没有有多个查询?

仅供参考SQL 2008筛选器选项似乎不适用于我正在使用的实际查询,因为实际查询使用按功能分组。

此外,SSRS 2008 DataSet查询可以是表达式,但我似乎无法得到它的工作。

+0

你想“报告限制到特定的位置”,但你也想“让所有的位置”。你能澄清明显的意图冲突吗? – Andomar 2009-05-21 18:54:19

回答

3

我不知道的过滤器选项,或者您在SSRS 2008年提到的数据集查询,但在某些旧版本的SSRS的,我见过像这样的东西:

SELECT SUM(Rev) FROM Table_sales WHERE LocId = @param or 'All' = @param 

我可疑的是这是最有效的方法,但它允许你有1个查询,你可以在其中选择所有结果(通过传递'All'作为参数)或者只是你想要的LocId(通过传递适当的LocId作为参数)。

+5

这就是我们通常为这种情况做的事情。你也可以做一些像WHERE LocId = COALESCE(@param,LocId)和传递null作为'all'情况下的参数......但是我怀疑是否明显更快/更高效。 – 2009-05-21 19:14:37

+0

COALESCE有趣的想法 - 以前我没有想过。 – 2009-05-21 19:21:54

0

也许你可以使用:

SELECT SUM(Rev) FROM Table_sales WHERE LocId IN (@param)