使用SQL Pivot查询语法苦苦挣扎

时间:2015-10-05 08:06:23

标签: sql sql-server tsql pivot

任何人都告诉我我的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],
        //]);

2 个答案:

答案 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子句中提供一个静态的年份列表。