Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 根据选择列的参数筛选行?_Sql Server_Reporting Services_Ssrs 2012 - Fatal编程技术网

Sql server 根据选择列的参数筛选行?

Sql server 根据选择列的参数筛选行?,sql-server,reporting-services,ssrs-2012,Sql Server,Reporting Services,Ssrs 2012,我正在VisualStudio中构建一个报告,希望有一个参数,允许我从预定列表中选择一个部门。每个部门在一个表中分配了若干列。选择部门时,仅显示与其组相关的列。我通过向每列添加一个列可见性表达式来设置这一点 但是,对于某些列,某些组有空行。例如,第10行可能有会计方面的内容,但没有合规方面的内容。如果我选择Compliance作为部门参数,我想隐藏此行。当我以@Department作为输入变量运行查询时,这在SQL Server中似乎工作得很好。然而,当我将此逻辑转移到VisualStudio时

我正在VisualStudio中构建一个报告,希望有一个参数,允许我从预定列表中选择一个部门。每个部门在一个表中分配了若干列。选择部门时,仅显示与其组相关的列。我通过向每列添加一个列可见性表达式来设置这一点

但是,对于某些列,某些组有空行。例如,第10行可能有会计方面的内容,但没有合规方面的内容。如果我选择Compliance作为部门参数,我想隐藏此行。当我以@Department作为输入变量运行查询时,这在SQL Server中似乎工作得很好。然而,当我将此逻辑转移到VisualStudio时,它不喜欢它。如果我选择了“Compliance”参数,那么表中除了相关的列标题之外,什么都不会显示

有没有更好的办法?我所做的是为每个部门创建='1'或'0'的列。因此,我有一个名为“Compliance”、“Legal”等的列,如果组中有相关内容,则每行都将被分配一个“1”表示是,或分配一个“0”表示否

列名为(示例):

参数类型设置为文本

DECLARE @Department VARCHAR(255)

SELECT * 
FROM   maintable mt
       LEFT OUTER JOIN @BooleanRows br 
                    ON (mt.ID = br.ID2) 
WHERE '1' = (CASE WHEN @Department = 'Legal'
            THEN br.Legal
            WHEN @Department = 'Compliance'
            THEN br.Compliance 
            WHEN @Department = 'Accounting'
            THEN br.Accounting 
            WHEN @Department = 'Operations'
            THEN br.Operations 
            WHEN @Department = 'IR'
            THEN br.IR 
        END)
正如我所说,如果我设置@Department='Legal'或'Compliance'等,那么查询在SQL Server中可以工作,但在Visual Studio报表生成器中似乎不起作用。此外,参数下拉列表的大写/拼写方式与查询中的完全相同

以下是在SSRS报告视图中筛选参数=部门1时的结果示例图像:


您可以看到有两种列类型-白色BG是根据参数筛选的列。浅蓝色背景是静态的列。在白色BG列中,出现3行。只有两行包含数据。我想隐藏/过滤掉不包含这些白色列数据的行

Dale Burrell是正确的,不清楚你的问题在哪里。我想说的是(从我对您的问题的理解来看),您最好使用行可见性,就像使用列可见性隐藏信息一样。

我不清楚您的问题是什么。我认为你需要用图像来说明你想要的报告和你的实际报告。另外,如果我理解正确的话,SSRS中的逻辑不起作用,在这种情况下,你需要发布它。根据我的经验,当SSRS逻辑不起作用时,会出现类型问题。@DaleBurrell我已经发布了一张图片和一些更详细的信息。希望这有助于澄清。我已经发布了一张图片和一些更详细的信息。希望这有助于澄清,但您以相同方式切换行可见性的想法可能是目前最好/最简单的解决方案。
DECLARE @Department VARCHAR(255)

SELECT * 
FROM   maintable mt
       LEFT OUTER JOIN @BooleanRows br 
                    ON (mt.ID = br.ID2) 
WHERE '1' = (CASE WHEN @Department = 'Legal'
            THEN br.Legal
            WHEN @Department = 'Compliance'
            THEN br.Compliance 
            WHEN @Department = 'Accounting'
            THEN br.Accounting 
            WHEN @Department = 'Operations'
            THEN br.Operations 
            WHEN @Department = 'IR'
            THEN br.IR 
        END)