sql - 在多值参数上选择“全选”时如何做出不同的行为
问题描述
我有一份报告服务报告和一个 stopproc。该报告有一个多值参数,使用如下:
<QueryParameter Name="@Aannemer">
<!-- Joins the multivalue selection into a single comma separated string. -->
<Value>=Join(Parameters!Aannemers.Value,",")</Value>
<rd:UserDefined>true</rd:UserDefined>
</QueryParameter>
stoproc 使用 string_split 拆分多值参数。stoproc 很长,所以这里有一个较小的版本:
@Aannemer AS NVARCHAR(max) = NULL
[...]
SELECT DISTINCT PV.ProefvakID
FROM [dbo].[Proefvak] PV
LEFT OUTER JOIN Meetvak MV ON MV.ProefvakID = PV.ProefvakID
LEFT OUTER JOIN Uitvoerder UI ON UI.UitvoerderID = MV.UitvoerderID
WHERE (UI.Uitvoerder IN(select value from string_split(@Aannemer,',')) OR @Aannemer IS NULL )
到目前为止,这一切都像一个魅力。
如果用户为 Aannemer 参数选择“全选”,他希望查看所有 Proefvak 并且根本不过滤 Aannemers。但是,如果存在未连接 Meetvak 的 Proefvak,则永远不会列出 Proefvak(因为 Meetvak 拥有 Uitvoerder 而 Proefvak 没有 Meetvak)。用户仍然希望查看没有 Meetvak 的 Proefvak。
有没有办法在 stoproc 中检查用户是否选择了“全选”,所以我可以返回所有 Proefvak 的?
我希望你明白我想要完成的事情。谈到 SQL,我是个菜鸟,所以请清楚复杂的部分。提前致谢!
==EDIT== 尝试使用@EddiGordo 的解决方案,看起来很有希望。下一个问题是@Aannemer 参数不包含值“全选”,因为这不是实际值。因此,我尝试像这样在 SSRS 端编辑代码:
<QueryParameter Name="@Aannemer">
<!-- Joins the multivalue selection into a single comma separated string. This paramater should be split up in the stored procedure. -->
<Value>
=IIF(Parameters!Aannemers.Count = COUNT(1, "Aannemers")
, "Select All",
Join(Parameters!Aannemers.Value,","))
</Value>
<rd:UserDefined>true</rd:UserDefined>
</QueryParameter>
但我无法像这样部署 SSRS 代码,我收到此错误:“用于数据集 '@Aannemer' 中的参数 '@Aannemer' 的表达式包括聚合或查找函数。聚合和查找函数不能在查询参数中使用表达式。”
解决方案
尝试这个:
IF @Aannemer IS NULL
BEGIN
SELECT DISTINCT PV.ProefvakID
FROM [dbo].[Proefvak] PV
LEFT OUTER JOIN Meetvak MV ON MV.ProefvakID = PV.ProefvakID
LEFT OUTER JOIN Uitvoerder UI ON UI.UitvoerderID = MV.UitvoerderID
END
ELSE
BEGIN
SELECT DISTINCT PV.ProefvakID
FROM [dbo].[Proefvak] PV
LEFT OUTER JOIN Meetvak MV ON MV.ProefvakID = PV.ProefvakID
LEFT OUTER JOIN Uitvoerder UI ON UI.UitvoerderID = MV.UitvoerderID
WHERE UI.Uitvoerder IN(select value from string_split(@Aannemer,','))
END
推荐阅读
- reactjs - ReactJS:如何以编程方式将用户重定向到另一个页面?
- java - 使用 Dozer 将字符串数组映射到 POJO
- git - 是否可以将分离和修改的文件夹重新连接到 Git 存储库?
- python - 使用 jinja2 和 weasyprint 在 PDF 渲染中忽略图像
- sql-server - 错误是什么?(从拆分中选择 [数据](@ProductName,','))
- dataset - Birt:防止重复数据集执行在报告中的多个表中使用
- sql-server - 如何将变量放在 SQL Server 注释中?
- flutter - 如何在颤动中为 RichText 小部件的 maxlines 属性设置动画
- xml - XML Schema 以任意顺序在两个属性上都是唯一的
- python - 如何从 .tsv 文件中读取选定的列?