行列转换
1 /****** Object: Table [dbo].[Table_1] Script Date: 08/06/2013 13:55:39 ******/ 2 /*行列转换*/ 3 4 SET ANSI_NULLS ON 5 GO 6 7 SET QUOTED_IDENTIFIER ON 8 GO 9 10 SET ANSI_PADDING ON 11 GO 12 13 /*对临时表无效*/ 14 IF OBJECT_ID ('#Table_1', 'U') IS NOT NULL 15 DROP TABLE #Table_1; 16 17 CREATE TABLE #Table_1( 18 [name] [varchar](50) NOT NULL, 19 [score] [real] NOT NULL, 20 [subject_id] [int] NOT NULL 21 ) ON [PRIMARY] 22 23 insert into #Table_1 ([name],[score],[subject_id]) values( 'a' , 90 , 1 ); 24 insert into #Table_1 ([name],[score],[subject_id]) values( 'b' , 80 , 2 ); 25 insert into #Table_1 ([name],[score],[subject_id]) values( 'c' , 70 , 3 ); 26 insert into #Table_1 ([name],[score],[subject_id]) values( 'd' , 50 , 1 ); 27 insert into #Table_1 ([name],[score],[subject_id]) values( 'e' , 40 , 2 ); 28 insert into #Table_1 ([name],[score],[subject_id]) values( 'f' , 60 , 1 ); 29 30 --显示1 31 32 SELECT [name],[1],[2],[3] 33 FROM #Table_1 34 pivot 35 ( 36 sum(score) for subject_id in ([1],[2],[3]) 37 ) as pvt 38 39 select * from #Table_1 40 41 --显示2 42 43 SELECT [name],[subject_id],[score] 44 FROM 45 ( 46 SELECT [name],[1],[2],[3] 47 FROM #Table_1 48 pivot 49 ( 50 sum(score) for subject_id in ([1],[2],[3]) 51 ) as pvt 52 ) p 53 unpivot 54 ( 55 score for subject_id in([1],[2],[3]) 56 ) as unpvt