Sql server 2005 查询列返回多个读数,并且在ssrs中需要是多个单元格
我有一个查询单元格,返回多个读数,最多8个 |_____readings_____| |1;2;3;..., 8 | |_____读物_____| |1;2.3.8 | 在我的SSRS报告中,我需要每个读数都在一个单独的列中,例如 | a | b | c | ...| | 1 | 2 | 3 | ...| |a | b | c || | 1 | 2 | 3 | ...| 我使用的是2005版的ssrs和sql serverSql server 2005 查询列返回多个读数,并且在ssrs中需要是多个单元格,sql-server-2005,reporting-services,Sql Server 2005,Reporting Services,我有一个查询单元格,返回多个读数,最多8个 |_____readings_____| |1;2;3;..., 8 | |_____读物_____| |1;2.3.8 | 在我的SSRS报告中,我需要每个读数都在一个单独的列中,例如 | a | b | c | ...| | 1 | 2 | 3 | ...| |a | b | c || | 1 | 2 | 3 | ...| 我使用的是2005版的ssrs和sql server 有人能帮忙吗?亲切问候报告级别 您可以使用Split
有人能帮忙吗?亲切问候报告级别 您可以使用
Split
函数获取分隔字符串并返回数组;基于此,您可以指定要从0-7获得八列的元素
在表达式中,您可以这样做:
=拆分(字段!readings.Value,“;”)(0)
(第一个元素)或
=Split(fields!readings.Value,“;”)(7)
(第8个元素)
问题是读数字段中的元素少于8个;您将收到错误报告-将表达式包装在IIf
中是不够的,因为这不会在SSR中短路,任何问题字符串都将出错
要处理这些问题,可以将逻辑移到报表中嵌入的自定义代码:
Function ElementByNumber(fieldValue As String, elementNumber As Integer) As String
If Split(fieldValue, ";").Length < elementNumber
ElementByNumber = Nothing
Else
ElementByNumber = Split(fieldValue, ";")(elementNumber - 1)
End If
End Function
根据需要为所需的每列重复此操作
数据库级别
其他非SSRS特定的解决方法是,如果可能,在数据库级别处理此问题,并仅使用未插入的数据作为报告中矩阵的基础
Erland Sommarskog下有一系列文章,介绍了在SQL Server中拆分字符串的任意数量的方法;所以这个问题还有很多其他的选择
显然,如果您处理的是固定的数据源/数据集,这可能不是一个选项。只是确认一下,每个读数字段中最多是八个值还是正好八个值?另外,在您的最终报告中,如果所有不同的读数值中最多只有七个值,报告应该只显示七列吗?或者在每种情况下显示八列可以吗?它最多有8个值,在每种情况下包含所有8个值也可以。非常感谢。我以为在SSRS级别没有办法。这太棒了。
=Code.ElementByNumber(fields!readings.Value, 8)