Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在使用SSRS的Sql中,如何按2个不同的列进行分组,并使其在某些情况下表现不同_Sql Server_Ssrs 2008 - Fatal编程技术网

Sql server 在使用SSRS的Sql中,如何按2个不同的列进行分组,并使其在某些情况下表现不同

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

我在一个名为Subs的表中有两个外键列(比如PONo、InvoiceNo)。在单个记录中,采购订单或发票或两者都将有一些数据(不带Null)。当PO和发票都有数据时,我只需要考虑发票,而不是PONo。 我必须使用上面的查询来生成报告。因此,我需要通过PONo或InvoiceNo进行分组,以发送给特定的供应商。我不知道如何把两列分成一列。特别是,当两条记录中的PoNo和InvoiceNo都相同时,我需要生成2个不同的字母,而不是1个。请考虑以下情况,

  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建议的计算字段将更适合您的需要。