SSRS在分组时组合来自多行的列中的值

时间:2014-03-03 17:38:23

标签: sql visual-studio-2010 visual-studio reporting-services

我觉得在SSRS报告中这应该相对容易。使用VS 2010.我有一个来自基本SQL查询的表。只需将列放入visual studio中的表中即可。我想首先按公司对表进行分组,我通过行组属性进行分组。我有一张看起来像这样的桌子。

 Company     Contact     ContactSub    SubCert    Year

  Bank3       Joey        Steven.B      A         2010
  Bank2       Dave        James         A         2010
  Bank2       Dave        Steve         B         2010
  Bank2       Dave        Mark          B         2010
  Bank2       Dave        James         A         2011
  Bank2       Dave        Steve         A         2011
  Bank2       Dave        Mark          B         2011
  Bank2       Dave        James         A         2012
  Bank2       Dave        Steve         A         2012
  Bank2       Dave        Mark          A         2012

我现在想要将Contact Subs和它们的subcert组合成一行。但仅使用最近一年。因为某些ContactSub可能已将其SubCert从B升级为A.

 Company       Contact            ContactSub            SubCert     Year

  Bank3         Joey             Steven.B               A           2010
  Bank2         Dave             James,Steve,Mark       A,A,A       2012

我添加了一个额外的gorup by属性,“Year”列到该行,并将此公式用于表中的ContactSub和SubCert列:

=Join(LookupSet(Fields!Company.Value,Fields!Company.Value,Fields!SubCert.Value,"DataSet Name"),",")

但这让我回答:

 Company     Contact     ContactSub                 SubCert     Year

  Bank3       Joey        Steven.B                   A          2010
  Bank2       Dave        James,Steve,Mark,James     A,B,B,A,   2012
                          Steve,Mark,James, Steve    A,B,A,A,
                          Mark                       A

我如何澄清我的公式,使其仅针对最新年份而不是使用所有年份的值?

希望这是有道理的。

2 个答案:

答案 0 :(得分:8)

使用您的数据:

enter image description here

Company上分组的表格:

enter image description here

我使用以下表达式:

<强> ContactSub

=Join(LookupSet(Fields!Company.Value & Max(Fields!Year.Value)
    , Fields!Company.Value & Fields!Year.Value
    , Fields!ContactSub.Value
    , "DataSet1"), ",")

<强> SubCert

=Join(LookupSet(Fields!Company.Value & Max(Fields!Year.Value)
    , Fields!Company.Value & Fields!Year.Value
    , Fields!SubCert.Value
    , "DataSet1"), ",")

您可以看到我正在使用Max(Fields!Year.Value)以及Fields!Company.Value仅匹配LookupSet表达式中的最高年份。

这给出了所需的结果:

enter image description here

答案 1 :(得分:0)

您的问题是它按预期工作 - LOOKUPSET()函数返回公司匹配的数据集中的所有记录。您需要在使用LOOKUPSET()函数时收紧标准,或者添加一些自定义代码以通过返回的数组并清除重复项。

收紧查询的一个选项可能是将数据集中的计算字段添加到一起连接公司名称和年份,至少在查看您的示例数据时,会提供稍微更独特的密钥。 ;寻找。