MYSQL - 透视数据

时间:2017-01-20 18:24:28

标签: mysql sql database pivot spreadsheet

我的应用程序中的数据目前以一系列列出现,但我真的希望只有两列,结果和任务。请参阅随附的“Spreadsheet”屏幕截图,了解我当前数据的来源以及“数据库”屏幕截图,了解我要实现的目标。

我目前能够使用大约100个UNION ALL语句执行此操作,但我的查询变得非常慢。如果没有那么多UNION ALL,有没有更好的方法来实现这一目标?

Spreadsheet 数据库:

Database

谢谢!

1 个答案:

答案 0 :(得分: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;