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

Например, скажем, у меня есть таблица (id это буква):

letter|color |number
a     |green |2
a     |blue  |3
b     |red   |3
b     |blue  |4
b     |yellow|1
c     |red   |9
c     |blue  |5

Я хочу преобразовать ее в:

letter|color_1|color_2|color_3|number_1|number_2|number_3
a     |green  |blue   |       |2       |3       |
b     |red    |blue   |yellow |3       |4       |1
c     |red    |blue   |       |9       |5       |

Какой тип преобразования SQL являетсяэтот?Мой босс сказал, что это часто делается, но я никогда не видел это раньше?Кроме того, как бы вы это сделали?

1 Ответ

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

Это сводный запрос.Если вы знаете, что вам нужно три набора столбцов, то вы можете использовать условное агрегирование.

Проблема в SQLite заключается в том, что у вас нет простого способа перечисления вещей.Для этого вы можете использовать подзапрос:

select t.letter,
       max(case when seqnum = 1 then color end) as color_1,
       max(case when seqnum = 2 then color end) as color_2,
       max(case when seqnum = 3 then color end) as color_3,
       max(case when seqnum = 1 then number end) as number_1,
       max(case when seqnum = 2 then number end) as number_2,
       max(case when seqnum = 3 then number end) as number_3
from (select t.*,
             (select count(*) from t t2 where t2.letter = t.letter and t2.color <= t.color) as seqnum
      from t
     ) t
group by t.letter;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...