SQLSERVER行列转换
create table test2(id int,name varchar(20),quarter char,profile1 int) insert into test2 values(1,'a',1,1000) insert into test2 values(1,'a',2,2000) insert into test2 values(1,'a',3,4000) insert into test2 values(1,'a',4,5000) insert into test2 values(2,'b',1,3000) insert into test2 values(2,'b',2,3500) insert into test2 values(2,'b',3,4200) insert into test2 values(2,'b',4,5500) select * from test2 select id,name, [1] as 一季度, [2] as 二季度, [3] as 三季度, [4] as 四季度 from test2 pivot (count([profile1]) for [quarter] in ([1],[2],[3],[4]) ) pvt /* id name quarter profile1 ----------- -------------------- ------- ----------- 1 a 1 1000 1 a 2 2000 1 a 3 4000 1 a 4 5000 2 b 1 3000 2 b 2 3500 2 b 3 4200 2 b 4 5500 (8 行受影响) id name 一季度 二季度 三季度 四季度 ----------- -------------------- ----------- ----------- ----------- ----------- 1 a 1 1 1 1 2 b 1 1 1 1 (2 行受影响) */
UNPIVOT是列转行,用法如下: 假如表结构如下: /* id name Q1 Q2 Q3 Q4 1 a 1000 2000 4000 5000 2 b 3000 3500 4200 5500 -----------------------------------------------*/ 使用UNPIVOT,将同一行中四个季度的列数据转换成四行数据: select id,name,quarter,profile from test unpivot ( profile for quarter in ([Q1],[Q2],[Q3],[Q4]) ) as unpvt /* ----------------------------------------------- 得出的结果如下: id name quarter profile 1 a Q1 1000 1 a Q2 2000 1 a Q3 4000 1 a Q4 5000 2 b Q1 3000 2 b Q2 3500 2 b Q3 4200 2 b Q4 5500 */