sql pivot函数不允许整数作为列名吗?

时间:2012-09-04 17:45:17

标签: sql-server sql-server-2008 sql-server-2008-r2

我正在尝试做一个相当符号的支点。这个按预期运行:

with cte as
(
    select Symbol, TradeDate, 'Per' + cast(Period as CHAR(3)) Per, Value
    from tblDailySMA
)

select * from cte
pivot
(Max(Value) for Per in (Per5,Per10,Per15,Per20,Per30,Per40,Per50,Per60,Per80,Per100,Per110,Per120,
    Per150,Per200)) pvt

并且这个给出错误Incorrect syntax near 5(并突出显示'for Period in'之后的第一个值(5):

with cte as
(
    select Symbol, TradeDate, Period, Value
    from tblDailySMA
)

select * from cte
pivot
(Max(Value) for Period in (5,10,15,20,30,40,50,60,80,100,110,120,150,200)) pvt

我得到了第一个在经过多次试验和错误后运行的...是否有一个原因,例如可能不允许整数值作为列名?感谢..

1 个答案:

答案 0 :(得分:6)

您应始终在column names []附近放置方括号:

with cte as
(
    select Symbol, TradeDate, Period, Value
    from tblDailySMA
)

select * from cte
pivot
(
   Max(Value) for Period in ([5],[10],[15],[20],[30],[40],[50],[60],[80],[100],[110],[120],[150],[200])
) pvt

来自MSDN

第一个字符必须是以下之一:

  • Unicode标准3.2定义的字母。 Unicode 字母的定义包括从a到z的拉丁字符, 从A到Z,还有其他语言的字母。
  • 下划线(_),符号(@)或数字符号(#)。

如果是其他任何内容,则需要使用方括号。 []