如何在SQL SSRS中使用列进行透视

问题描述 投票:0回答:1

[您是否知道我的脚本是否缺少任何其他内容,我试图透视表“ Pay_Details”,并在列行中设置逐月,行中设置年份。我尝试了以下操作,并且我的脚本代码已发布。

我收到以下错误:消息156,级别15,状态1,第15行关键字“ SELECT”附近的语法不正确。Msg 102,第15级,第1行,第22行')'附近的语法不正确。

我的输出应如下所示:

Year     January     February    March
2019     150         120         230
2018     100         200         300
2017     90          110         120

[[脚本代码]:

SELECT Server,
    DATEPART(year, date) [year], 
    DATEPART(quarter, date) [quarter], 
    DATEPART(month, date) [month], 
    DATEPART(day, date) [day],
    Payee,
    Amount

FROM   [dbo].[Pay_Details]

    (SELECT    DATEPART(year, date) [year], 
   DATEPART(quarter, date) [quarter], 
   DATEPART(month, date) [month], 
   DATEPART(day, date) [day],
   Payee,
   Amount

    ) p PIVOT ( MAX([Amount])
                FOR ColName IN ( DATEPART(year, date) [year], 
   DATEPART(quarter, date) [quarter], 
   DATEPART(month, date) [month], 
   DATEPART(day, date) [day],
   Payee,
   Amount

) ) AS pvt
ORDER BY [year] DESC, 
         [quarter], 
         [month], 
         [day]
sql reporting-services sql-server-2005
1个回答
0
投票

在枢轴中,您使用别名,您需要使用文字。这意味着您要么

a。需要事先知道您想要的列的名称(因为数据会发生变化,这不太可能)

b。使用动态sql构建透视表语句。有很多关于如何在SO上执行此操作的示例。

但是,当您尝试在SSRS中获取报告时,无需执行任何此操作。如果您在报表上使用Matrix控件,它将为您进行数据透视。

这里是一个快速的(从内存中)指南。

创建新报告并添加新数据集。将此数据集的查询设置为类似于

SELECT    DATEPART(year, date) [year], 
   DATEPART(quarter, date) [quarter], 
   DATEPART(month, date) [month], 
   DATENAME(month, date) [monthName], 
   DATEPART(day, date) [day],
   Payee,
   Amount
FROM Pay_Details

注:在此示例中,我们实际上不需要收款人,季度和天列,但您可以对其进行扩展以包括所需的内容。我还添加了monthName

现在将矩阵添加到报表设计图面。您将创建一个2x2表格,其中包含“列”,“行”和“数据”的占位符]

从数据集中拖动[year]字段并将其放在“行”上,将[month]拖动到“列”,最后将[amount]拖动到“数据”

就这样(几乎)

运行报告,您将看到数据已被透视。唯一的问题是您的月份列显示月份号,要解决此问题,请单击包含月份号的单元格,然后从列表中选择[monthName]。这些列仍将按数字排序,因为排序是由列组属性确定的。

© www.soinside.com 2019 - 2024. All rights reserved.