Я получаю синтаксическую ошибку 1 января.
Мой SampleStart находится в формате даты и времени. Я что-то не так делаю?
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 году.
Вы не можете указать псевдонимы столбцов в функции поворота, вы должны сделать это в выборе. Кроме того, при указании вашего предложения 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
- Что общего у МЕЖДУ и дьявола?yyyyMMdd
, в зависимости от ваших настроек 2018-10-01
может быть либо 10 января, либо 1 октября.Таким образом, вы получите:
WHERE SampleStart >= '20180101'
AND 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