任何人都告诉我我的SQL有什么问题,今天很难解决这个问题。错误是:
Msg 156,Level 15,State 1,Line 11
关键字“select”附近的语法不正确。
Msg 102,Level 15,State 1,Line 11
')'附近的语法不正确。
SELECT *
FROM (
SELECT
left(datename(month,TransactionDateTime),3) as [month], year(TransactionDateTime) as [year],
count(*) as Total
FROM quotations
) as s
PIVOT
(
SUM(Total)
FOR [year] IN (select distinct year(TransactionDateTime) from quotations)
) AS pivot
我追求的形状是......所以每年作为列名,每个月12行。以下只是为了说明形状
// var data = google.visualization.arrayToDataTable([
// ['Month', '2013', '2014', '2015'],
// ['Jan', 10, 30, 31],
// ['Feb', 11, 30, 32],
//]);
答案 0 :(得分:0)
pivot的语法如下(From TechNet):
onLocationChanged(Location location)
您可以看到PIVOT
(
<aggregation function>(<column being aggregated>)
FOR
[<column that contains the values that will become column headers>]
IN ( [first pivoted column], [second pivoted column], ... [last pivoted column])
) AS <alias for the pivot table>
子句内部应该有IN
中包含的列名,如果列名称是动态的,则可能会出现问题。使用动态SQL可以轻松解决此问题。
以下是一个例子:
[]
我不知道您的架构是什么,因此表/列名可能有误。如果这没有帮助,如果您共享架构和样本数据,我可以更精确。
答案 1 :(得分:0)
问题在于查询的以下部分
(select distinct year(TransactionDateTime) from quotations)
您需要在in子句中提供一个静态的年份列表。