如何使用 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]
的单元格。列仍将按编号排序,因为排序由列组属性决定。
你知道我的脚本是否遗漏了任何额外的东西吗?我正在尝试调整 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]
的单元格。列仍将按编号排序,因为排序由列组属性决定。