[您是否知道我的脚本是否缺少任何其他内容,我试图透视表“ 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]
在枢轴中,您使用别名,您需要使用文字。这意味着您要么
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]
。这些列仍将按数字排序,因为排序是由列组属性确定的。