Sql server 根据选择列的参数筛选行?
我正在VisualStudio中构建一个报告,希望有一个参数,允许我从预定列表中选择一个部门。每个部门在一个表中分配了若干列。选择部门时,仅显示与其组相关的列。我通过向每列添加一个列可见性表达式来设置这一点 但是,对于某些列,某些组有空行。例如,第10行可能有会计方面的内容,但没有合规方面的内容。如果我选择Compliance作为部门参数,我想隐藏此行。当我以@Department作为输入变量运行查询时,这在SQL Server中似乎工作得很好。然而,当我将此逻辑转移到VisualStudio时,它不喜欢它。如果我选择了“Compliance”参数,那么表中除了相关的列标题之外,什么都不会显示 有没有更好的办法?我所做的是为每个部门创建='1'或'0'的列。因此,我有一个名为“Compliance”、“Legal”等的列,如果组中有相关内容,则每行都将被分配一个“1”表示是,或分配一个“0”表示否 列名为(示例): 参数类型设置为文本Sql server 根据选择列的参数筛选行?,sql-server,reporting-services,ssrs-2012,Sql Server,Reporting Services,Ssrs 2012,我正在VisualStudio中构建一个报告,希望有一个参数,允许我从预定列表中选择一个部门。每个部门在一个表中分配了若干列。选择部门时,仅显示与其组相关的列。我通过向每列添加一个列可见性表达式来设置这一点 但是,对于某些列,某些组有空行。例如,第10行可能有会计方面的内容,但没有合规方面的内容。如果我选择Compliance作为部门参数,我想隐藏此行。当我以@Department作为输入变量运行查询时,这在SQL Server中似乎工作得很好。然而,当我将此逻辑转移到VisualStudio时
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)