将MYSQL行值转换为列名

问题描述 投票:1回答:1

我有这样的表:

job_status_air

status_id  | status
-----------+------------
1          | AIRPORT IN
2          | AIRPORT OUT

job_status_air_pkg

id  | status_id  | package_no
----+------------+------------
1   | 1          | pkg1
2   | 1          | pkg2
3   | 1          | pkg3
4   | 2          | pkg1

我使用以下查询:

select package_no , 
       (case when job_status_air.status = "AIRPORT IN" then job_status_air_pkg.id end) AIRPORTIN, 
       (case when job_status_air.status = "AIRPORT OUT" then job_status_air_pkg.id else 0 end) AIRPORTOUT 
FROM job_status_air_pkg 
LEFT JOIN job_status_air ON (job_status_air.status_id = job_status_air_pkg.status_id) 
WHERE job_status_air.mawb = 'awb1' or hawb = 'awb1' 

我无法达到以下结果:

package_no | AIRPORT IN | AIRPORT OUT
-----------+------------+-------------
 pkg1      |    1       |  4
 pkg2      |    2       |
 pkg3      |    3       |

有人能帮帮我吗?

mysql
1个回答
2
投票

你需要应用聚合和分组

select package_no , 
       max(case when job_status_air.status = "AIRPORT IN" then job_status_air_pkg.id end) AIRPORTIN, 
       max(case when job_status_air.status = "AIRPORT OUT" then job_status_air_pkg.id else 0 end) AIRPORTOUT 
FROM job_status_air_pkg 
LEFT JOIN job_status_air ON (job_status_air.status_id = job_status_air_pkg.status_id) 
WHERE job_status_air.mawb = 'awb1' or hawb = 'awb1' 
group by package_no 
© www.soinside.com 2019 - 2024. All rights reserved.