Sql server 合并存储过程中的行并在ssrs报告中使用

Sql server 合并存储过程中的行并在ssrs报告中使用,sql-server,reporting-services,Sql Server,Reporting Services,我想在一个存储过程中合并多行,并在ssrs报告中使用这些数据 示例数据: CustomerId | Reference | Date | Product | Quantity 1 | 1 | 1/1/2019 | Glass | 6 1 | 1 | 1/1/2019 | Plate | 6 1 | 2 | 2/1/2019 | Glass |

我想在一个存储过程中合并多行,并在ssrs报告中使用这些数据

示例数据:

    CustomerId | Reference | Date     | Product | Quantity
    1          | 1         | 1/1/2019 | Glass   | 6
    1          | 1         | 1/1/2019 | Plate   | 6
    1          | 2         | 2/1/2019 | Glass   | 1
    2          | 3         | 2/1/2019 | Fork    | 3
我希望如何在报告中显示它:

    CustomerId | Reference | Date     | Glass | Plate | Fork
    1          | 1         | 1/1/2019 | 6     | 6     | NULL
    1          | 2         | 2/1/2019 | 1     | NULL  | NULL
    2          | 3         | 2/1/2019 | NULL  | NULL  | 3   
我想打印一份包含特定月份数据的报告。有很多不同的产品,并不是所有的产品都在一个月内使用。为了不使报告杂乱无章,我只想展示所使用的产品

我从以下问题中找到了如何使用动态透视查询获取此表:


然而,我不知道如何在报告中得到这一点。任何帮助都将不胜感激

下面是一个关于如何动态透视数据的快速示例

Declare @SQL varchar(max) = '
Select *
 From (
        Select CustomerID
              ,Reference
              ,Product
              ,Date
              ,Quantity
         From  YourTable
         Where month(Date)=1  -- Or desired filter
      ) src
 Pivot (sum([Quantity]) For [Product] in (' + Stuff((Select Distinct ','+QuoteName(Product) 
                                                       From #YourTable  
                                                       Where month(Date)=1  -- Or desired filter
                                                       For XML Path('')),1,1,'')  + ') ) p'
Exec(@SQL);
--Print @SQL

不需要在SQL中透视此数据。Reporting Services可以为您做到这一点

创建一个新的报告并添加一个新的数据集,数据集查询将根据您的示例数据返回结果

我使用以下查询来复制您的数据

DECLARE @t TABLE(CustomerID int, Reference int, [date] date, Product varchar(10), Quantity int)
INSERT INTO @t VALUES 
(1,1,'2019-01-01', 'Glass', 6),
(1,1,'2019-01-01', 'Plate', 6),
(1,2,'2019-01-02', 'Glass', 1),
(2,3,'2019-01-02', 'Fork', 3)
SELECT * FROM @t
将矩阵控件添加到报告中

将客户字段从报表数据面板拖到矩阵中的“行”占位符,然后将产品字段拖到“列”占位符,最后将数量拖到“数据”占位符

报告设计将如下所示(尚未完成…)

双击主设计面板下的行组(在我的示例中称为CustomerID),并将分组设置为按CustomerID(应该已经存在)、引用和日期,因此看起来像这样

接下来,右键单击矩阵中的CustomerID文本框并选择“Insert Column=>Inside Group-right”。重复此操作以添加另一列

在两个新列中,单击下拉列表并选择“引用”和“日期”字段。如果您的参考字段是数字,SSRS会将其添加为总和(参考)。如果是这种情况,右键单击文本框,选择“表达式”,并将其更改为简单的
=字段!参考值

最后,单击矩阵中的日期文本框,并将其格式属性设置为
dd/MM/yyyy

最终的设计应该是这样的(在对标题行进行格式化之后)

当我们运行报告时,我们得到了这个

唯一的区别是列的排序顺序,但您可以在列组属性中对此进行自定义


随着新日期、产品等的添加,矩阵将相应调整。

谢谢!我首先必须将日期从datetimeoffset转换为date,但现在它可以按照我的意愿工作。