這是 建立數據庫的腳本文件sql
CREATE TABLE [dbo].[stu]( [學號] [nvarchar](255) NOT NULL, [姓名] [nvarchar](255) NULL, [性別] [nvarchar](255) NULL, [專業] [nvarchar](255) NULL, [院系] [nvarchar](255) NULL ) ON [PRIMARY] GO INSERT [dbo].[stu] ([學號], [姓名], [性別], [專業], [院系]) VALUES (N'111405060432', N'王小明', N'男', N'金融系', N'經濟學院') INSERT [dbo].[stu] ([學號], [姓名], [性別], [專業], [院系]) VALUES (N'07102060215', N'王碩問', N'男', N'材料成型及控制工程', N'材料科學與工程學院') INSERT [dbo].[stu] ([學號], [姓名], [性別], [專業], [院系]) VALUES (N'07104060407', N'馮靜', N'女', N'金融學', N'經濟學院') INSERT [dbo].[stu] ([學號], [姓名], [性別], [專業], [院系]) VALUES (N'07108040122', N'王新哲', N'男', N'環境工程', N'化工與製藥學院') INSERT [dbo].[stu] ([學號], [姓名], [性別], [專業], [院系]) VALUES (N'07110020114', N'劉龍', N'男', N'應用物理學', N'物理與工程學院')
--------行值轉爲列值 使用Case語句 方法一 SELECT 學號 ,Max(CASE 專業 WHEN '金融系' THEN 院系 else 院系 END) AS '金融系' ,Max(CASE 專業 WHEN '材料成型及控制工程' THEN 院系 else 院系 END) AS '材料成型及控制工程' ,Max(CASE 專業 WHEN '金融學' THEN 院系 else 院系 END) AS '金融學' ,Max(CASE 專業 WHEN '環境工程' THEN 院系 else 院系 END) AS '環境工程' ,Max(CASE 專業 WHEN '應用物理學' THEN 院系 else 院系 END) AS '應用物理學' FROM stu GROUP BY 學號 go ------行轉換列值 ------ 方法二 declare @sql varchar(8000) select @sql=isnull(@sql+',','')+' max(case 專業 when '''+專業+''' then 院系 else 院系 end) ['+專業+']' from(select distinct 專業 from stu)as a set @sql='select 學號 ,'+@sql+' from stu group by 學號' exec(@sql) go -----使用isnull()----- declare @sql varchar(8000) select @sql=isnull(@sql+',','')+ 專業 from stu group by 專業 set @sql='select * from stu pivot (max(院系) for 專業 in ('+@sql+'))a' exec(@sql) go
----------使用pivot --------
select * -----要選取的列, * 表明選擇所有 from stu -------從哪一個結果集中選出數據 pivot( max(院系) --聚合函數Max表示你須要怎樣處理轉換後的列的值,是總和(sum),仍是平均(avg)仍是min,max等等。 for 專業 ---- for 專業 就是說將 專業 列的值分別轉換成一個個列,也就是「以值變列」。 in -------咱們只想取其中幾個值轉換成列,那麼怎樣取呢?就是在in裏面寫要取的值 (材料科學與工程學院,經濟學院,化工與製藥學院,物理與工程學院,金融學))--- as b go -----------列轉行 --------------------- -----使用SQL Server 2005動態SQL declare @sql nvarchar(4000) select @sql=isnull(@sql+',','')+quotename(Name) from syscolumns where ID=object_id('stu')and Name not in('姓名','學號','專業','性別') order by Colid set @sql='select 學號,姓名,[專業],性別 from stu unpivot ([aa] for [bb] in('+@sql+'))b' exec(@sql) go
------方法二------------ select * from ( select 學號,姓名,性別,專業='金融系',院系='經濟學院' from stu union all select 學號,姓名,性別,專業='材料成型及控制工程',院系='材料科學與工程學院' from stu union all select 學號,姓名,性別,專業='金融學',院系='經濟學院' from stu ) t order by 學號 go
----------使用 unpivot----------
select aa,bb from stu unpivot (aa for bb in([院系],[專業])) t
---------列轉行-----數據庫
--------行轉列------函數