Вы не можете указать псевдонимы столбцов в функции pivot, вы должны сделать это в select.Кроме того, при указании предложения IN
в сводной области вы должны применять аналогичные правила при выборе столбцов, если столбец является зарезервированным словом или содержит специальные символы (например, пробел), или начинается с цифры и т. Д., То вы должны заключитьимя в квадратных скобках.
Наконец, вы должны дать псевдониму самой функции сводки.
например,
SELECT pvt.[year],
JAN = pvt.[1],
FEB = pvt.[2],
MAR = pvt.[3],
APR = pvt.[4],
MAY = pvt.[5],
JUN = pvt.[6],
JUL = pvt.[7],
AUG = pvt.[8],
SEP = pvt.[9],
OCT = pvt.[10],
NOV = pvt.[11],
DEC = pvt.[12]
FROM (
SELECT YEAR(SampleStart) AS [year], MONTH(SampleStart) AS [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 -- Alias here too
ORDER BY pvt.[year] DESC
Если, как указано в вопросе, SampleStart
в столбце DATETIME
, тогда я внесу два изменения в ваше предложение where:
- Используйте исключительный диапазон дат вместо
BETWEEN
- Что общего между BETWEEN и дьяволом? - Используйте недвусмысленный литеральный формат даты
yyyyMMdd
, в зависимости от ваших настроек 2018-10-01
может быть либо 10 января, либо 1 октября.
Таким образом, вы получитес:
WHERE SampleStart >= '20180101'
AND SampleStart < '20190101'