加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle的数据表中行转列与列转行的操作实例讲解

发布时间:2020-12-12 17:02:25 所属栏目:百科 来源:网络整理
导读:行转列 一张表 查询结果为 --行转列 或者为 2.人员信息表包括姓名 时代 金额 显示行转列 姓名 时代 金额 姓名 年轻 中年 老年 张丽 1000000.00 4000000.00 500000000.00 孙子 2000000.00 12233335.00 4552220010.00 3.学生表 [Tb_Student] 显示效果 静态SQL,

行转列

一张表

20151217170849821.jpg (220×151)

查询结果为

20151217170911011.jpg (170×63)

--行转列

或者为

2.人员信息表包括姓名 时代 金额

20151217170947066.jpg (254×150)

显示行转列
姓名 时代 金额

姓名 年轻 中年 老年

张丽 1000000.00 4000000.00 500000000.00

孙子 2000000.00 12233335.00 4552220010.00

20151217171005767.jpg (322×84)

3.学生表 [Tb_Student]

20151217171053471.jpg (204×144)

显示效果

20151217171109012.jpg (191×56)

静态SQL,指subject只有语文、数学、英语这三门课程。

--动态SQL,指subject不止语文、数学、英语这三门课程。

oracle中Decode()函数使用 然后将这些累计求和(sum部分)


列转行

20151217171127272.jpg (225×66)

生成

20151217171144405.jpg (223×134)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读