Преобразование значения строки 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       |

  

Кто-нибудь может мне помочь, пожалуйста?

Ответ №1:

вам необходимо применить агрегацию и группировку по

 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