сделать 2-мерную координату, используя результаты выбора mysql - PullRequest
0 голосов
/ 11 ноября 2018

У меня вопрос по запросам mysql.

У меня есть таблица с данными ниже.

From To Weight
--------------
A    B    1
A    C    3
B    C    2
D    E    4

И я хочу получить результат sql, как показано ниже ..

(?) A   B   C   D   E
----------------------
A   0   1   3   0   0
B   0   0   2   0   0
C   0   0   0   0   0 
D   0   0   0   0   4
E   0   0   0   0   0

А какие данные в исходной таблице не определены. Как я могу достичь этого?

1 Ответ

0 голосов
/ 11 ноября 2018

Если вы знаете исходные столбцы, вы можете сделать:

select c.col1,
       sum(case when to = 'A' then weight else 0 end) as a,
       sum(case when to = 'B' then weight else 0 end) as b,
       sum(case when to = 'C' then weight else 0 end) as c,
       sum(case when to = 'D' then weight else 0 end) as d,
       sum(case when to = 'E' then weight else 0 end) as d
from (select 'A' as col1 union all select 'B' union all select 'C' union all select 'D' union all select 'E'
     ) c left join
     t
     on t.from = c.col1
group by c.col1;

Если вы не знаете исходные столбцы, вы можете объединить значения в одну строку:

select col1.col, 
       group_concat(col2.col, ':', t.weight order by col2.col)
from ((select `from` as col from t
      ) union   -- on purpose to remove duplicates
      (select `to` from t
      )
     ) col1 cross join
     ((select `from` as col from t
      ) union   -- on purpose to remove duplicates
      (select `to` from t
      )
     ) col2 left join
     t
     on col1.col = t.`from` and col2.col = t.`from`
group by col1.col;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...