2017-01-20 8 views
0

Данные моего приложения в настоящее время представлены в виде ряда столбцов, но мне бы очень хотелось, чтобы их было всего два столбца, результаты и задание. См. Скриншот прилагаемого скриншота «Таблицы» для моих текущих данных и «Базы данных», которые я пытаюсь достичь.MYSQL - данные поворота

В настоящее время я могу сделать это примерно с 100 операторами UNION ALL, но мои запросы становятся DREADFULLY медленно. Есть ли лучший способ добиться этого без столь большого количества СОЮЗОВ?

Spreadsheet База данных:

Database

Спасибо!

ответ

1

UNION ALL - прекрасный подход, но он требует сканирования таблицы один раз для каждого подзапроса.

Один из вариантов использует cross join. Это требует большего количества кодировок, но это может ускорить работу:

select tt.task, 
     (case when tt.task = 'Use Proper PPE' then use_proper_ppe 
      when tt.task = 'Damage Prevention' then damage_prevention 
      . . . 
     end) as result 
from t cross join 
    (select 'Use Proper PPE' as task union all 
     select 'Damage Prevention' union all 
     . . . 
    ) tt; 
+0

Спасибо! Я попробую это. Я перекрещиваюсь с данными из примерно 14 таблиц, как мне перестроить код, чтобы это отразить? – JMB1656

+0

@ JMB1656. , , В вашем вопросе упоминается только одна таблица. Если у вас есть сложный запрос, вы можете использовать подзапрос, где 't'. –