SQL列转行

来源:互联网 发布:网络语红烧肉什么意思 编辑:程序博客网 时间:2024/06/05 21:02

SQL列转行

生成

sql代码

复制代码
 生成静态:select *from (select sname,[Course ] ='数学',[Score]=[数学] from Tb_students union allselect sname,[Course]='英语',[Score]=[英语] from Tb_students union allselect sname,[Course]='语文',[Score]=[语文] from Tb_students)torder by sname,case [Course] when '语文' then 1 when '数学' then 2 when '英语' then 3 endgo --列转行的静态方案:UNPIVOT,sql2005及以后版本   SELECT sname,Subject, grade  from dbo.Tb_students  unpivot(grade for Subject in([语文],[数学],[英语]))as up  GO      --列转行的动态方案:UNPIVOT,sql2005及以后版本  --因为行是动态所以这里就从INFORMATION_SCHEMA.COLUMNS视图中获取列来构造行,同样也使用了XML处理。 declare @s nvarchar(4000)select @s=isnull(@s+',','')+quotename(Name)from syscolumns where ID=object_id('Tb_students') and Name not in('sname')order by Colidexec('select sname,[Subject],[grade] from Tb_students unpivot ([grade] for [Subject] in('+@s+'))b')goselect    sname,[Subject],[grade]from    Tb_studentsunpivot    ([grade] for [Subject] in([数学],[英语],[语文]))b
复制代码

 

0 0
原创粉丝点击