首页 > 解决方案 > 是否可以以转置格式从表中检索数据

问题描述

我有一个表格,其中包含以下格式的数据。

id | col1 | col2 | col3
1  | d11  | d21  | d31
2  | d12  | d22  | d32
3  | d13  | d23  | d33
4  | d14  | d24  | d34
5  | d15  | d25  | d35
6  | d16  | d26  | d36

是否可以获取以下格式的数据。

id    |  1  |  2  |  3  |  4  |  5  |  6
col1  | d11 | d12 | d13 | d14 | d15 | d16
col2  | d21 | d22 | d23 | d24 | d25 | d26
col3  | d31 | d32 | d33 | d34 | d35 | d36

我什至没有一个基本的想法。任何事情都是受欢迎的。

标签: mysqlsqlmariadbpivot-tableunpivot

解决方案


您需要取消旋转并重新旋转。您可以使用条件聚合:

select col,
       sum(case when id = 1 then val end) as val_1,
       sum(case when id = 2 then val end) as val_2,
       sum(case when id = 3 then val end) as val_3,
       sum(case when id = 4 then val end) as val_4,
       sum(case when id = 5 then val end) as val_5,
       sum(case when id = 6 then val end) as val_6
from ((select id, 'col1' as col, col1 as val from t
      ) union all
      (select id, 'col2' as col, col2 as val from t
      ) union all
      (select id, 'col3' as col, col3 as val from t
      ) 
     ) t
group by col;

推荐阅读