SqlServer 行转列,列转行 以及PIVOT函数快速实现行转列,UNPIVO
?一? ?、列转行 创建所需的数据 CREATE TABLE [StudentScores]( [UserName] NVARCHAR(20),--学生姓名 INSERT INTO [StudentScores] SELECT ‘张三‘,‘语文‘,50 查询 结果 UserName Subject Score Nick 语文 80 ? 1.使用case when? then? ?else? end方法 select UserName, max( case [Subject] when ‘语文‘ then score else 0 end) as ‘语文‘, max( case [Subject] when ‘数学‘ then score else 0 end) as ‘数学‘, max( case [Subject] when ‘英语‘ then score else 0 end) as ‘英语‘, max( case [Subject] when ‘生物‘ then score else 0 end) as ‘生物‘ from StudentScores group by UserName ? 实现结果 UserName 语文 数学 英语 生物 2.使用pivot 函数解决 首先看pivot的函数的语法 PIVOT函数的格式如下 PIVOT(<聚合函数>([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后的列名N]))
sql 语句如下:select * from StudentScores as A pivot (max(score) for Subject in ([英语],[数学],[语文],[生物])) as M ? 二 、行转列? ? 准备数据 CREATE TABLE ProgrectDetail INSERT INTO ProgrectDetail 1.使用?UNION ALL? 方法 select ProgrectName,OverseaSupply(需要转列的名称) from ProgrectDetail 2.使用 unpivot函数 UNPIVOT函数的格式如下: UNPIVOT([转换为行的列值在转换后对应的列名] for [转换为行的列名在转换后对应的列名] in ([转换为行的列1],[转换为行的列2],[转换为行的列3],...[转换为行的列N]))
? select p.ProgrectName,plvalue,typepl from ( unpivot ( plvalue for typepl in (OverseaSupply,NorthSupply ) ) p ? ? 坚持? ? 写博客,把学过的东西记录下来 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |