【问题标题】:Mysql Change position of rows to columns from repeated dataMysql将重复数据的行位置更改为列
【发布时间】:2018-06-19 07:35:09
【问题描述】:

我需要将行从重复的 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       |
+----+---------+---------+---------+---------+

【问题讨论】:

  • 相反,要认真考虑处理应用代码中数据显示的问题

标签: mysql sql select join


【解决方案1】:

使用条件聚合。以下代码只有在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 demo

如果id 值中存在“差距”,则可以使用自联接计算cn

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2017-07-12
    • 2017-11-05
    • 2012-07-28
    • 2019-01-14
    相关资源
    最近更新 更多