Как транспонировать таблицу в SQLite? - PullRequest
0 голосов
/ 24 октября 2018

Здравствуйте, поэтому у меня есть таблица в SQlite:

   User    |  Group  |   Role    
John Smith |   A     |   admin
John Smith |   B     |   user
Jane Doe   |   A     |   user
Jane Doe   |   B     |   limit
Jane Doe   |   C     |   admin
Jack Brown |   A     |   admin, user

Я хочу транспонировать таблицу, чтобы в каждой строке был только один пользователь . Заголовки столбцов "Группа" .Значения для «Группы» будут значениями в столбце «Роль» из первой таблицы.

Итак, при преобразовании это выглядело бы так:

   User    |    A        |    B       |  C 
John Smith |   admin     |    user    |
Jane Doe   |   user      |    limit   | admin
Jack Brown |   admin,user|            |

Как можно было бы сделать этот SQLite?

1 Ответ

0 голосов
/ 24 октября 2018

Вы можете использовать row_number() и сделать агрегацию:

select User, 
       max(case when seq = 1 then role end) as a,
       max(case when seq = 2 then role end) as b,
       max(case when seq = 3 then role end) as c
from (select t.*,
             row_number() over (partition by User order by group) as seq
      from table t
     ) t
group by User;
...