Как исправить ошибку: неправильный синтаксис рядом с ключевым словом «FOR» - PullRequest
0 голосов
/ 06 октября 2019

Я новичок в функции PIVOT и до сих пор не мог успешно выполнить любой запрос при повороте таблицы.

Вот источник данных:

region         countries
Africa         180
Antarctica     3
Asia           99
Europe         154
Middle East    54
North America  123
Oceania        87
South America  48

Мне нужно, чтобы каждый регион стал столбцом - только одна строка с количеством стран в регионе.

Уровень совместимости:SQL Server 2019 (150)

Я испробовал каждое предложение, которое смог найти в Интернете, но все еще не могу понять, что я делаю неправильно.

SELECT [Africa], [Asia], [Middle East], [North America], 
       [Oceania], [South America], [Antarctica]
FROM (
  SELECT region, count(name) as countries
  FROM dbo.country
  Group by region
) AS pDataSource
PIVOT
(
 countries
    FOR region IN ([Africa], [Asia], [Middle East], [North America], 
    [Oceania], [South America], [Antarctica])
) AS pPivotTable

Сообщение 156, Уровень 15,Состояние 1, строка 10
Неверный синтаксис рядом с ключевым словом «FOR».

Ответы [ 2 ]

1 голос
/ 06 октября 2019

Вы пропустили уведомление о агрегации sum(countries)

...
PIVOT
(
 sum(countries) 
    FOR region IN ([Africa], [Asia], [Middle East], [North America], 
    [Oceania], [South America], [Antarctica])
) AS pPivotTable
0 голосов
/ 06 октября 2019

Почему бы просто не использовать условное агрегирование?

SELECT SUM(CASE WHEN region = 'Africa' THEN 1 ELSE 0 END) as Africa,
       SUM(CASE WHEN region = 'Asia' THEN 1 ELSE 0 END) as Asia,
       . . .   -- continue for the rest of the continents
FROM dbo.country;
...