为什么使用SQL pivot会出现语法错误?

为什么使用SQL pivot会出现语法错误?,sql,pivot,Sql,Pivot,我在1月1日收到一个语法错误 我的SampleStart是datetime格式的。我的别名有问题吗 SELECT * FROM ( SELECT year(SampleStart) year, month(SampleStart) month, AllowedPopulation FROM BIC_AGGREGATE_FINAL WHERE SampleStart BETWEEN '2018-01-01' AND '2018-12-31' ) as s PIVOT ( max(A

我在1月1日收到一个语法错误

我的SampleStart是datetime格式的。我的别名有问题吗

SELECT * FROM (
  SELECT year(SampleStart) year, month(SampleStart) month, AllowedPopulation
  FROM BIC_AGGREGATE_FINAL
  WHERE SampleStart BETWEEN '2018-01-01' AND '2018-12-31'
) as s
PIVOT (
  max(AllowedPopulation) 
  FOR month in (
    1 JAN, 2 FEB, 3 MAR, 4 APR, 5 MAY, 6 JUN,
    7 JUL, 8 AUG, 9 SEP, 10 OCT, 11 NOV, 12 DEC
  )
)
ORDER BY year DESC

我希望结果能显示2018年每个月的允许人口。

您不能在pivot函数中提供列别名,必须在select中提供。此外,在轴内的子句中指定
时,在选择列时必须应用类似的规则,如果列是保留字,或包含特殊字符(例如空格),或以数字开头等,则必须将名称括在方括号中

最后,必须为pivot函数本身指定一个别名

e、 g

如问题所述,如果
SampleStart
DATETIME
列,那么我将对where子句进行两个更改:

  • 使用专用日期范围,而不是介于
  • 之间的-
  • 使用明确的日期文字格式
    yyyyMMdd
    ,具体取决于您的设置
    2018-10-01
    可以是1月10日,也可以是10月1日
  • 所以你最终会得到:

       WHERE SampleStart >= '20180101' 
       AND SampleStart < '20190101'
    
    其中SampleStart>='20180101'
    和SampleStart<'20190101'
    
    您不能在pivot函数中提供列别名,必须在select中提供。此外,在轴内的子句中指定
    时,在选择列时必须应用类似的规则,如果列是保留字,或包含特殊字符(例如空格),或以数字开头等,则必须将名称括在方括号中

    最后,必须为pivot函数本身指定一个别名

    e、 g

    如问题所述,如果
    SampleStart
    DATETIME
    列,那么我将对where子句进行两个更改:

  • 使用专用日期范围,而不是介于
  • 之间的-
  • 使用明确的日期文字格式
    yyyyMMdd
    ,具体取决于您的设置
    2018-10-01
    可以是1月10日,也可以是10月1日
  • 所以你最终会得到:

       WHERE SampleStart >= '20180101' 
       AND SampleStart < '20190101'
    
    其中SampleStart>='20180101'
    和SampleStart<'20190101'
    
    尝试使用-

    SELECT  year,
    [1] AS JAN,
    [2] AS FEB,
    [3] AS MAR,
    [4] AS APR,
    [5] AS MAY,
    [6] AS JUN,
    [7] AS JUL,
    [8] AS AUG,
    [9] AS SEP,
    [10] AS OCT,
    [11] AS NOV,
    [12] AS DEC
    
    
    FROM 
    (
        SELECT year(SampleStart) year, 
        month(SampleStart) month, 
        AllowedPopulation
        FROM BIC_AGGREGATE_FINAL
        WHERE SampleStart BETWEEN '2018-01-01' AND '2018-12-31'
    ) as s
    PIVOT 
    (
    max(AllowedPopulation) 
    FOR month in (
        [1], [2], [3], [4], [5], [6],
        [7], [8], [9], [10], [11], [12]
    )
    )AS PVT
    ORDER BY year DESC
    
    试一试-

    SELECT  year,
    [1] AS JAN,
    [2] AS FEB,
    [3] AS MAR,
    [4] AS APR,
    [5] AS MAY,
    [6] AS JUN,
    [7] AS JUL,
    [8] AS AUG,
    [9] AS SEP,
    [10] AS OCT,
    [11] AS NOV,
    [12] AS DEC
    
    
    FROM 
    (
        SELECT year(SampleStart) year, 
        month(SampleStart) month, 
        AllowedPopulation
        FROM BIC_AGGREGATE_FINAL
        WHERE SampleStart BETWEEN '2018-01-01' AND '2018-12-31'
    ) as s
    PIVOT 
    (
    max(AllowedPopulation) 
    FOR month in (
        [1], [2], [3], [4], [5], [6],
        [7], [8], [9], [10], [11], [12]
    )
    )AS PVT
    ORDER BY year DESC