mysql - 将 MYSQL 行值转换为列名

标签 mysql

我有这样的表:

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       |

有人能帮帮我吗?

最佳答案

你需要应用聚合和分组

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 

关于mysql - 将 MYSQL 行值转换为列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55588526/

相关文章:

sql - 简单的 MySql - 获取表中的最大数字

mysql - 按 id 和月份获取最后一个值、倒数第二个值和倒数第三个值

php - 如何在 MySQL 数据库中存储苗族字符

php - 与 codeigniter 加入时出错 : variable query

mysql - 打印数据库表的状态

php - SQL 查询不打印 varchar/text 列

mysql - 查找重复行仅获取较旧的行

php - 在文本中搜索多个关键字

mysql - Google Cloud SQL 和时区

c# - 遇到 MySQL 异常问题