2016-03-11 1 views
1

У меня есть 4 таблицы как сильфонакак подводить из более чем 3 таблицы в SQL

table : user 

id_tkn | nm_user  | 
----------------------------------------- 
    1 | belva  | 
    2 | nanda  | 
    3 | maya  | 
----------------------------------------- 

table : maintenance 

id_mntnc|id_tkn | sts | date | 
----------------------------------------------------------------- 
    1 | 2 | 1 |2016-03-03 | 
    2 | 2 | 2 |2016-03-03 | 
    3 | 1 | 1 |2016-03-03 | 
    4 | 2 | 0 |2016-03-03 | 
    5 | 2 | 1 |2016-03-03 | 
----------------------------------------------------------------- 

table : Installasi 

id_istlsi|id_tkn| sts | date | 
----------------------------------------------------------------- 
    1 | 2 | 1 |2016-03-03 | 
    2 | 1 | 1 |2016-03-03 | 
    3 | 1 | 1 |2016-03-03 | 
    4 | 2 | 1 |2016-03-03 | 
    5 | 3 | 1 |2016-03-03 | 
----------------------------------------------------------------- 

table : visit 

id_vst |id_tkn | sts | date | 
----------------------------------------------------------------- 
    1 | 2 | 1 |2016-03-03 | 
    2 | 2 | 0 |2016-03-03 | 
    3 | 1 | 1 |2016-03-03 | 
----------------------------------------------------------------- 

информация о колонке 'StS' 0 -> В ожидании 1 -> Успех 2 -> Потерпеть неудачу. из таблицы выше, я хочу добавить по статусу (sts), где id_tkn = 2, результат, как в таблице ниже, как создать команду SQL для создания таблицы ниже?

id_tkn | nm_usr | maintenance_suc | maintenance_fail | installasi_suc| installasi_fail | visit_suc| visit_fail 
----------------------------------------------------------------------------------------------------------------------- 
    2 | nanda |  2   |  1   |  2   |  0   |  1 | 0 

ответ

0

Это должно работать правильно, но, вероятно, должны быть оптимизированы:

select 
    u.id_tkn, 
    u.nm_user, 
    sum (case when stat.sts = 1 and stat.typ = 'm' then 1 else 0 end) as maintenance_suc, 
    sum (case when stat.sts = 2 and stat.typ = 'm' then 1 else 0 end) as maintenance_fail, 
    sum (case when stat.sts = 1 and stat.typ = 'i' then 1 else 0 end) as installasi_suc, 
    sum (case when stat.sts = 2 and stat.typ = 'i' then 1 else 0 end) as installasi_fail, 
    sum (case when stat.sts = 1 and stat.typ = 'v' then 1 else 0 end) as visit_suc, 
    sum (case when stat.sts = 2 and stat.typ = 'v' then 1 else 0 end) as visit_fail 
from 
user u 
left join 
(
    select sts, 'm', id_tkn 
    from 
    maintenance 
    union all 
    select sts, 'i', id_tkn 
    from 
    Installasi 
    union all 
    select sts, 'v', id_tkn 
    from 
    visit 
) stat on u.id_tkn = stat.id_tkn 
where u.id_tkn = 2 
group by u.id_tkn, u.nm_user 
+0

Я пытался, но результаты не match.maintenance_suc = 8, maintenance_fail = 0, installasi_suc = 12, installasi_fail = 0, visit_suc = 6, visit_fail = 0. Я добавил «КОГДА» между случаем и sts – Zia

+0

ох, извините. Я обновляю ответ. – gabba

+0

Извините, я не могу запустить скрипт, я получаю «непризнанный тип оператора (рядом с)». # 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с 'stat (sts, typ, id_tkn) как () Выберите sts,' m ', id_tkn от @main' в строке 1 – Zia

Смежные вопросы