我的应用程序中的数据目前以一系列列出现,但我真的希望只有两列,结果和任务。请参阅随附的“Spreadsheet”屏幕截图,了解我当前数据的来源以及“数据库”屏幕截图,了解我要实现的目标。
我目前能够使用大约100个UNION ALL语句执行此操作,但我的查询变得非常慢。如果没有那么多UNION ALL,有没有更好的方法来实现这一目标?
谢谢!
答案 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;