У меня есть таблица ctrlr_err_hist
, в которой есть следующие столбцы:
visit_id
err_cd
err_name
m1_err_cnt
m2_err_cnt
Возможные значения для err_cd
: 0, 1, 3.
Теперь я хочу написатьзапрос с разными ошибками с одинаковым visit_id
в одной строке.Например, если в таблице есть следующие записи:
visit_id err_cd err_name m1_err_cnt
1 0 encoder 500
1 3 breakout 212
2 1 obclose 45
2 3 breakout 143
Эта таблица будет объединена с таблицей tchn_visit_hist
в visit_id
.Если нет данных для какого-либо из err_cd, он будет нулевым.Конечный результат будет выглядеть следующим образом:
visit_id encoder_cnt breakout_cnt obclose_cnt
1 500 212 null
2 null 143 45
Я написал следующий запрос, который трижды объединяет одну и ту же таблицу
select t.visit_id, t.door_id, enc.encoder_cnt, brk.breakout_cnt, ob.ob_close_cnt
from tchn_visit_hist t
left join (
select m1_err_cnt as encoder_cnt, visit_id
from ctrlr_err_hist
where err_cd = '0'
) as enc
on t.visit_id = enc.visit_id
left join (
select m1_err_cnt as breakout_cnt, visit_id
from ctrlr_err_hist
where err_cd = '3'
) as brk
on t.visit_id = brk.visit_id
left join (
select m1_err_cnt as ob_close_cnt, visit_id
from ctrlr_err_hist
where err_cd = '1'
) as ob
on t.visit_id = ob.visit_id
Интересно, есть ли лучший, более эффективный способ выполненияэто.