Поворотный стол - PullRequest
       7

Поворотный стол

0 голосов
/ 05 февраля 2019
Id Year Values
1 2014 10
1 2015 4
1 2016 7
1 2017 17
2 2014 5
2 2015 6
2 2016 7
2 2017 9

Ответ должен быть

Id 2014 2015 2016 2017
----------------------
1    10    4    7   17
2     5    6    7    9

Я пытался, как показано ниже

Select * 
from crosstab(select id,value,year from table)
As res(id int,year int,year int,year int,year int,year int);

1 Ответ

0 голосов
/ 05 февраля 2019

Другим вариантом, кроме использования crosstab(), будет использование GROUP BY и некоторая агрегатная функция, например MAX() с CASE END для поворота.В качестве дополнительного бонуса это ANSI SQL, поэтому он будет работать в большинстве систем РСУБД.

SELECT 
   Id
 , MAX(CASE WHEN <table>.Year = 2014 WHEN <table>.Values ELSE 0 END) AS 2014
 , MAX(CASE WHEN <table>.Year = 2015 WHEN <table>.Values ELSE 0 END) AS 2015 
 ...
 ...
FROM 
 <table>
GROUP BY 
 <table>.Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...