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

How to Pivot with Columns in SQL SSRS

你知道我的脚本是否遗漏了任何额外的东西吗?我正在尝试调整 Table "Pay_Details" 并在列行上设置月份,在行上设置年份。我尝试了以下方法,我的脚本代码已发布。

我收到以下错误:消息 156,级别 15,状态 1,第 15 行 关键字 'SELECT' 附近的语法不正确。 消息 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]

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

一个。需要事先知道你想要的列的名称(不太可能因为数据会改变)

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 column

现在将矩阵添加到报表设计图面。您将得到一个 2x2 table,其中包含 'Columns'、'Rows' 和 'Data'

的占位符

将数据集中的 [year] 字段拖放到 'Rows' 上,将 [month] 拖到 'Columns',最后将 [amount] 拖到 [=45] =]

就这样(差不多)

运行 报表,您会看到数据已经过透视。唯一的问题是您的月份列显示月份编号,要解决此问题,请从列表中单击包含月份编号和 select [monthName] 的单元格。列仍将按编号排序,因为排序由列组属性决定。