Sql server 在使用SSRS的Sql中,如何按2个不同的列进行分组,并使其在某些情况下表现不同
我在一个名为Subs的表中有两个外键列(比如PONo、InvoiceNo)。在单个记录中,采购订单或发票或两者都将有一些数据(不带Null)。当PO和发票都有数据时,我只需要考虑发票,而不是PONo。 我必须使用上面的查询来生成报告。因此,我需要通过PONo或InvoiceNo进行分组,以发送给特定的供应商。我不知道如何把两列分成一列。特别是,当两条记录中的PoNo和InvoiceNo都相同时,我需要生成2个不同的字母,而不是1个。请考虑以下情况,Sql server 在使用SSRS的Sql中,如何按2个不同的列进行分组,并使其在某些情况下表现不同,sql-server,ssrs-2008,Sql Server,Ssrs 2008,我在一个名为Subs的表中有两个外键列(比如PONo、InvoiceNo)。在单个记录中,采购订单或发票或两者都将有一些数据(不带Null)。当PO和发票都有数据时,我只需要考虑发票,而不是PONo。 我必须使用上面的查询来生成报告。因此,我需要通过PONo或InvoiceNo进行分组,以发送给特定的供应商。我不知道如何把两列分成一列。特别是,当两条记录中的PoNo和InvoiceNo都相同时,我需要生成2个不同的字母,而不是1个。请考虑以下情况, SubsId
SubsId PONO Issue InvoiceNo Supp
1 001 XX null abc
2 null YY 001 abc
3 null ZZ 001 abc
如果上面的表值是这样的话,那么我需要得到这样的结果
字母1
PONO Issue InvoiceNo Supp
001 XX null abc
字母2
PONO Issue InvoiceNo Supp
null YY 001 abc
null ZZ 001 abc
因为,我需要以PONo或InvoiceNo作为单个组显示报告
我到处搜索,在SSRS中将2列分成1组。但是,我没有找到任何解决办法。所以,请帮我解决这个问题
谢谢您可以使用该语句、TSQL Case When语句或SSRS IIF(compareison、Truepart、falsepart)
TSQL合并
select colalesce(InvoiceNo, PONO) as Number, Issue, Supp
from mytable1 join mytable2 etc
Group By colalesce(InvoiceNo, PONO), Issue, Supp
TSQL情况下
Select case When InvoiceNo is null then PONO
else InvoiceNo END as Number, Issue, Supp
from mytable1 join mytable2 etc
Group By case When InvoiceNo is null then PONO
else InvoiceNo END , Issue, Supp
SSRS
数字文本框表达式
=IIF(Fields!InvoiceNo.value ="", Fields!PONO.value, Fields!InvoiceNo.value)
您可以向数据集中添加计算字段,如下所示:
=IIf(IsNothing(Fields!InvoiceNo.Value)
, "P" & Fields!PONO.Value
, "I" & Fields!InvoiceNo.Value)
可以叫它GroupNumber
或任何你喜欢的名字。在您的示例中,PONO
和InvoiceNo
似乎都是字符串,所以我刚刚将一个类型标识符字符串连接到它们。如果它们是数字,您可以根据需要在上述表达式中将它们转换为字符串
这实现了您的两个目标,即能够将PONO
和InvoiceNo
作为单个分组项目一起使用,但也能够区分这两种类型,因此编号相同的PONO
和InvoiceNo
值不会作为一个分组项目一起使用
然后,在报告中设置tablix组时,您可以在此新字段上分组。它不需要显示在任何地方,只是用于分组;这应该可以满足您的要求。以上建议可以。但我需要在SSRS中将两列分为一列。如果我在SSRS中包含要分组的新列(编号),那么如果相同的PONo和InvoiceNo出现在两条记录中,那么它将以两个不同的字母出现,但应以两个不同的字母出现。在这种情况下@Ian Prestons建议的计算字段将更适合您的需要。