在SSRS转置上显示数据

时间:2018-07-03 13:06:56

标签: sql-server-2008 reporting-services pivot pivot-table

我想显示一些已转置的数据,以便将其旋转到SSRS顶部的某个日期,如下图所示:

Transposed report

我已经尝试通过动态sql查询来执行此操作,但这会带来更多问题,因为标题每天都会更改名称。

我希望在SSRS上旋转数据非常容易,但是我似乎无法解决该问题。

这是SSRS 2008 / MSSQL 2012。

编辑-当我尝试在“日期”列上分组时,它在ssrs上显示出来,这不是我想要的Click Here

编辑

我尝试了以下建议,但是我不知道您的意思是怎么做?在SQL或SSRS中是什么意思

这是我的查询

 IF OBJECT_ID('tempdb..#Cass_SSRS_DailyMiTable') IS NOT NULL
    DROP TABLE #Cass_SSRS_DailyMiTable

CREATE TABLE #Cass_SSRS_DailyMiTable (
    [date] DATE   ,[Total Orders] INT   ,[Orders Done] INT   ,[Pieces picked] INT   ,[Items Picked] INT   ,[Average Items on Order] INT   ,[Picked Today] INT)

INSERT INTO #Cass_SSRS_DailyMiTable (
    date,
    [Total Orders],
    [Pieces picked],
    [Items Picked],
    [Average Items on Order],
    [Picked Today]) VALUES
    ('2017-03-24', 53, 352, 33, 22, 0),
    ('2017-03-25', 351, 23, 235, 52, 0),
    ('2017-03-26', 35, 55, 25, 95, 0)


DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT ',' + QUOTENAME(CONVERT(VARCHAR(100), c.date, 120)) 
            FROM #Cass_SSRS_DailyMiTable c
            ORDER BY c.date ASC
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 

    ';WITH PreUnpivot AS
    (
        SELECT
            C.date, 
            C.[Total Orders],
            C.[Pieces picked],
            C.[Items Picked],
            C.[Average Items on Order],
            C.[Picked Today]
        FROM
            #Cass_SSRS_DailyMiTable AS C
    )
    SELECT
        P.Concept,
        ' + @cols + '
    FROM
        PreUnpivot AS C
        UNPIVOT (
            PivotedValues FOR Concept IN ([Total Orders], [Pieces picked], [Items Picked], [Average Items on Order], [Picked Today])
        ) AS T
        PIVOT (
            MAX(T.PivotedValues) FOR T.Date IN (' + @cols + ')
        ) AS P'


EXEC (@query)

2 个答案:

答案 0 :(得分:1)

首先,您需要在数据集中具有通用的通用标识符,以便所有行都具有可以分组的相同标识符。我在数据集中插入并使用了一个名为“ id”的字段。

第二次插入具有一个列组(日期字段)和四个行组(类别组)的矩阵。

对于每个行组,它们都必须按通用的通用标识符分组。(组属性,group on ...)

以下示例:

enter image description here

答案 1 :(得分:0)

我使用了您原来的sql并相应地修改了脚本:

如果OBJECT_ID('tempdb ..#Cass_SSRS_DailyMiTable')不为空     删除表#Cass_SSRS_DailyMiTable

创建表#Cass_SSRS_DailyMiTable(     [日期] DATE,[总订单] INT,[完成的订单] INT,[选择的件数] INT,[选择的项目] INT,[平均订单项] INT,[今天选择的] INT,[id] INT)

INSERT INTO #Cass_SSRS_DailyMiTable(     日期,     [总订单],     [选件],     [挑选的物品],     [订购的平均商品],     [今天精选],     [id])VALUES     ('2017-03-24',53,352,33,22,0,1),     ('2017-03-25',351,23,235,52,0,1),     ('2017-03-26',35,55,25,95,0,1)

选择* 来自#Cass_SSRS_DailyMiTable

我先前回答中的报告定义格式仍然适用。

如果您需要更多信息,请给我您的电子邮件地址。