那么解决方法有两种:
1:
select s.year, q.quarter,q.results
from dwtmp.tmp_xn_lsb1 as s,
table (values(1, s.q1),
(2, s.q2),
(3, s.q3),
(4, s.q4))
as q(quarter, results);
核心是用table函数建立了一个表,这个表是用value实现的多行表,value实现虚表
2:
select year, '1' as quarter , q1 as results from dwtmp.tmp_xn_lsb1 union all
select year, '2' as quarter , q2 as results from dwtmp.tmp_xn_lsb1 union all
select year, '3' as quarter , q3 as results from dwtmp.tmp_xn_lsb1 union all
select year, '4' as quarter , q4 as results from dwtmp.tmp_xn_lsb1
order by year,quarter
注:在这个例子中,一个year对应多个quarter,所以横表转纵表时只能利用以上两种方法,可是,当一个year只对应一个quarter时,那么能够用一个case when 语句实现横转纵
例如:
建立一个表以下: