行转列
一张表

查询结果为

--行转列
或者为
2.人员信息表包括姓名 时代 金额

显示行转列
姓名 时代 金额
姓名 年轻 中年 老年
张丽 1000000.00 4000000.00 500000000.00
孙子 2000000.00 12233335.00 4552220010.00

3.学生表 [Tb_Student]

显示效果

静态SQL,指subject只有语文、数学、英语这三门课程。
--动态SQL,指subject不止语文、数学、英语这三门课程。
oracle中Decode()函数使用 然后将这些累计求和(sum部分)
列转行

生成

sql代码
生成静态:
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 Colid
exec('select sname,[Subject],[grade] from Tb_students unpivot ([grade] for [Subject] in('+@s+'))b')
go
select
sname,[grade]
from
Tb_students
unpivot
([grade] for [Subject] in([数学],[英语],[语文]))b
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|