mysql - 将 MYSQL 行值转换为列名
问题描述
我有这样的表:
工作状态空气
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
推荐阅读
- c# - 尝试删除具有关系的模型时关联断开异常
- postgresql - 数据库列中 a 物理占用的大小取决于我的字符串大小或列的最大大小?
- python - Coursera 课程 - Python 作业中的数据科学介绍 1
- node.js - Firebase 功能:错误:无法打开写入
- flutter - 如何在 Flutter 中使用 setState() 更新 ModalBottomSheet 的 ParentWidget?
- arrays - 删除 C 数组中的重复项
- html - 如何在链接按下时显示弹出窗口?
- r - 错误:在 R 中合并列表时,向量内存耗尽(达到限制?)
- asp.net - 即使连接打开,阅读器关闭时调用 Read 的尝试也无效
- firebase - 如果在点击链接后尝试返回移动应用程序,如何处理电子邮件验证?