本文介绍了有没有办法从多个数据集中获取所有列值的列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有2个数据集。这两个数据集都有一个名为Office的列。假设数据集1的Office列的值为伦敦、利物浦和数据集2,而Office列的值为加利福尼亚州的华盛顿。

在SSRS中,有没有办法像Union all那样(但在SSRS中)在一个表列中生成所有Office值的列表?

推荐答案

可能有更好的方法来做到这一点,但这是我唯一能想到的..

您需要为每条记录提供唯一的数字ID

假设您不能在数据集查询中简单地将它们合并在一起,如果您可以为每个记录添加一个数字ID,那么您就可以这样做(尽管有点笨拙)

首先,我创建了两个数据集ds1ds2来保存两个办公室名称列表。

例如,第一个数据集查询就是这样...

DECLARE @t TABLE(OfficeID int, Office varchar(20))
INSERT INTO @t VALUES
(1, 'London'),
(2, 'Liverpool')
SELECT * FROM @t

第二个是这个

DECLARE @t TABLE(OfficeID int, Office varchar(20))
INSERT INTO @t VALUES
(10, 'Washington'),
(11, 'California')
SELECT * FROM @t

如您所见,每个办公室现在都有一个唯一的数字ID

接下来,我需要另一个数据集,其中包含覆盖整个办公室ID范围的数字列表。在本例中,范围仅为20个数字注意:在其他系统的SQL Server上执行此操作时,您必须想出另一种获取数字列表的方法

因此,dsNum的查询为

declare @n table(num int)
insert into @n
select top 20 row_number() over(order by t1.number) as N
from   master..spt_values t1 
       cross join master..spt_values t2
SELECT * FROM @n
接下来,我向报告中添加了一个表,将其减少为两列,并将其绑定到dsNum。第一列仅为[num]字段。

第二个是执行两次查找并获取第一个非空结果的表达式。表达式为

=IIF(
    LEN(LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds1"))>0
    , LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds1")
    , LOOKUP(Fields!num.Value, Fields!OfficeID.Value, Fields!Office.Value, "ds2")
    )
如果我们现在运行该报告,我们会得到..

最后,我们需要隐藏空行。为此,我将Row Visibilty表达式设置为

=LEN(ReportItems!LookupResult.Value) = 0

结果是这样的(显然您不需要Num列,但它只是为了说明)

这篇关于有没有办法从多个数据集中获取所有列值的列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 03:20