我可以避免使用union all语句吗?

时间:2018-02-21 04:16:24

标签: sql sql-server tsql unpivot

我从系统中获取了一个摘录,该系统以下列格式显示excel中的数据:

Like this

我使用冗长的联合声明来得到以下结果:

Like this

我想知道是否有一种更好的方式比一大堆联合所有的陈述更简洁,更容易阅读?

1 个答案:

答案 0 :(得分:1)

如果您正在使用SQL Server,那么交叉申请将是更好的方法UNION ALL声明

select a.* from table t
cross apply (
       values (PersonId, 'Q1', Q1)
             ,(PersonId, 'Q2', Q2)
             ,(PersonId, 'Q3', Q3)
             ,(PersonId, 'Q4', Q4)
               ...
               ...
             ,(PersonId, 'Q20', Q20)
)a(PersonId, Q, Outcome)
order by a.Q, a.PersonId