mysql将行的位置从重复数据更改为列

iqjalb3h  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(250)

我需要将行从重复的id更改为列。
这个例子能更好地解释我的问题
我所拥有的:

+----+-----------+-------+
| id | id_data   | values|
+----+-----------+-------+
|  1 |    1      | data1 |
+----+-----------+-------+
|  2 |    1      | data2 |
+----+-----------+-------+
|  3 |    1      | data3 |
+----+-----------+-------+
|  4 |    2      | data4 |
+----+-----------+-------+
|  5 |    2      | data5 |
+----+-----------+-------+

我想要的是:

+----+---------+---------+---------+---------+
| id | id_data | option1 | option2 | option3 |
+----+---------+---------+---------+---------+
|  1 |       1 | data1   | data2   | data3   |
|  2 |       2 | data4   | data5   | 0       |
+----+---------+---------+---------+---------+
klr1opcd

klr1opcd1#

使用条件聚合。以下代码只有在 id 依次增长一倍。

select t.id_data,
       max(case when cn = 0 then values end) as option1,
       max(case when cn = 1 then values end) as option2,
       max(case when cn = 2 then values end) as option3
from
(
    select *, 
           id - (select min(id) from data d2 where d1.id_data = d2.id_data) cn
    from data d1
) t
group by t.id_data

dbfiddle演示
如果数据中存在“缺口” id 值,然后 cn 可以使用自联接进行计算。

相关问题