【发布时间】:2014-10-14 04:17:12
【问题描述】:
这是我给定的表格:
+---------+------------+-------------------+--------------------------+---------------+---------------+
| exec_id | project_id | flow_id | job_id | start_time | end_time |
+---------+------------+-------------------+--------------------------+---------------+---------------+
| 10919 | 16 | my_flow_cleanup | init | 1408480308611 | 1408480308686 |
| 10919 | 16 | my_flow_cleanup | job_id_1 | 1408480309212 | 1408480309426 |
| 10919 | 16 | my_flow_cleanup | job_id_2 | 1408480308721 | 1408480308776 |
| 10919 | 16 | my_flow_cleanup | job_id_3 | 1408480308827 | 1408480309171 |
+---------+------------+-------------------+--------------------------+---------------+---------------+
我想实现这样的选择:
exec_id init_start init_end job_id_1_start job_id_1_end job_id_2_start job_id_2_end job_id_3_start job_id_3_end
10919 1408480308611 1408480308686 1408480309212 1408480309426 1408480308721 1408480308776 1408480308827 1408480309171
我在这上面花了两天多的时间,但收效甚微。 This question 帮助了我,但并不完全。如您所见,另一个问题涉及获取 2 列并将它们转换为 2 行。但我必须取 3 列并将它们转换为 2 行。
谁能帮我解决这个问题?在 MySQL 中甚至可能吗?
编辑 1
感谢 Khalid Junaid 的回答,它解决了我的问题。我必须再做一次修改。我必须按 start_time 升序对选定的列进行排序。
例如:
+---------+------------+-------------------+----------+---------------+---------------+
| exec_id | project_id | flow_id | job_id | start_time | end_time |
+---------+------------+-------------------+----------+---------------+---------------+
| 10919 | 16 | my_flow_cleanup | init | 10 | 15 |
| 10919 | 16 | my_flow_cleanup | job_id_1 | 30 | 40 |
| 10919 | 16 | my_flow_cleanup | job_id_2 | 40 | 50 |
| 10919 | 16 | my_flow_cleanup | job_id_3 | 20 | 25 |
+---------+------------+-------------------+----------+---------------+---------------+
当前查询将返回:
exec_id init_start init_end job_id_1_start job_id_1_end job_id_2_start job_id_2_end job_id_3_start job_id_3_end
10919 10 15 30 40 40 50 20 25
我需要:
exec_id init_start init_end job_id_3_start job_id_3_end job_id_1_start job_id_1_end job_id_2_start job_id_2_end
10919 10 15 20 25 30 40 40 50
请注意,现在根据 start_time 更改了列的顺序。
我尝试用temporary tables 和views 来做这件事,我认为这很容易。不幸的是,我没有创建表/创建视图权限。有没有办法在没有临时表和视图的情况下实现这一点?
【问题讨论】:
-
job_id 是否限制为 3 或者 b 可以超过 3?
-
为什么要为每条记录单独的表?相反,你为什么不能用通用字段(job_id、init_start、init_end、job_id_start、..)创建一个新表?
-
@MKhalidJunaid: job_id 可以大于 3
-
@vengets:我没有创建新表。我必须查询此表并将结果附加到文件中
-
你想使用过程/函数吗?
标签: mysql sql pivot-table