2016-10-24 52 views
0

感谢以前的海报,自从我发布最初的问题以来,我不得不修改报告,所以这是一个修改。级联参数 - 是否可以跳过参数?

我想创建一个使用级联参数的报告。我在'LocalAuthority'参数中添加了一个'All'选项,但当它移动到@ward参数时不会返回任何值。
enter image description here

这是参数的标准是如何在我的“主数据”存储过程中设置

WHERE [county] = @county 

      AND [LocalAuthority] = @LocalAuthority 

        AND CHARINDEX (','+Ward+',', ','[email protected]+',') > 0 

这是我的存储过程中的LocalAuthority

SELECT * FROM 

     (

        select distinct 


        LocalAuthority, 
        county    
        from tableA 



        where [county] like 'essex' 


       union all 


       select distinct 

        LocalAuthority, 
        county    
        from tableA 



        where county like 'kent' 


       union all 

        select distinct 

         'All' as LocalAuthority, 
         'CountyWide' as county  

         from tableA 

        )a 

WHERE 

    LocalAuthority = @LocalAuthority 
+1

您可以将“@ LocalAuthority”的默认值设置为与可用值中使用的数据集相同。因此,如果您在默认情况下未在“@ LocalAuthority”中选择任何值,则它将以数据集中定义的所有值运行。 –

+0

@alejandrozuleta这不仅适用于多值参数吗?从问题中提到一个'All'选项被添加到'@ City'时,这将表明这些是单值的。 – iamdave

+0

你可以做的一件事就是创建一个额外的参数并将其设置为隐藏,以检查是否所有的@City =“如果是这样”,则返回“@ LocalAuthority”选择。 –

回答

1

如果你的局部视图正在使用单值参数,我会建议使用数据集填充您的参数,并让该数据集只需检查参数@City中的All,然后ret如果选择All,则输入一个值,例如Ignore。在您的主数据集中,您使用case语句返回IGNORE时返回所有的LA。

您可以使用类似的查询下面的东西到指定@LocalAuthority值列表和设置的默认值IGNORE这将填充(如果可用),并且需要来自Las列表中用户选择如果不能。这样,如果您忽略了LAs,则不需要用户交互:

declare @City nvarchar(50) = 'a'; 

declare @LAs table (LA nvarchar(50)); 
insert into @LAs values 
('Birmingham') 
,('Grenwich') 
,('Exeter') 


select distinct case when @City = 'All' 
        then 'IGNORE' 
        else LA 
        end as LocalAuthorities 
from @LAs 


set @City = 'All'; 

select distinct case when @City = 'All' 
        then 'IGNORE' 
        else LA 
        end as LocalAuthorities 
from @LAs