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

行转列一张表

7b6a994869fca657e02674d8929773cb.png

查询结果为

22ef7dfa152bff6f9699f3a9ffe923bc.png

--行转列

select years,(select amount from Tb_Amount as A where month=1 and A.years=Tb_Amount.years)as m1,

(select amount from Tb_Amount as A where month=2 and A.years=Tb_Amount.years)as m2,

(select amount from Tb_Amount as A where month=3 and A.years=Tb_Amount.years)as m3

from Tb_Amount group by years

或者为

select years as 年份,

sum(case when month='1' then amount end) as 一月,

sum(case when month='2' then amount end) as 二月,

sum(case when month='3' then amount end) as 三月

from dbo.Tb_Amount group by years order by years desc

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

c7932349b01f24610886d976c51ace5b.png

显示行转列

姓名     时代       金额

姓名  年轻         中年       老年

张丽 1000000.00 4000000.00    500000000.00

孙子 2000000.00   12233335.00  4552220010.00

a4789e3ff43bf9c9cb649d05835971e1.png

select uname as 姓名,

SUM(case when era='年轻' then amount end) as 年轻,

SUM(case when era='中年' then amount end) as 中年,

SUM(case when era='老年' then amount end) as 老年

from Tb_People group by uname order by uname desc

3.学生表 [Tb_Student]

75d77d15753366436924c944baf772f9.png

显示效果

57f1545964d25ab2cd489da69ab63312.png

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

select sname as 姓名,

max(case Subject when '语文' then grade else 0 end) as 语文,

max(case Subject when '数学' then grade else 0 end) as 数学,

max(case Subject when '英语' then grade else 0 end) as 英语

from dbo.Tb_Student group by sname order by sname desc

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

declare @sql varchar(8000)

set @sql = 'select sname as ' + '姓名'

select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then grade else 0 end) [' + Subject + ']'

from (select distinct Subject from Tb_Student) as a

set @sql = @sql + ' from Tb_Student group by sname order by sname desc'

exec(@sql)

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

select t.sname AS 姓名,

sum(decode(t.subject,'语文',grade,null))语文 ,

sum(decode(t.subject,'数学',grade,null)) 数学,

sum(decode(t.subject,'英语',grade,null)) 英语

from Tb_Student t group by sname order by sname desc

列转行

06837f239c99e523435ae529b8d0658a.png

生成

2be7964fc2274b160ab623216e13b34f.png

sql代码

生成静态:

select *

from (select sname,[Course ] ='数学',[Score]=[数学] from Tb_students union all

select sname,[Course]='英语',[Score]=[英语] from Tb_students union all

select sname,[Course]='语文',[Score]=[语文] from Tb_students)t

order by sname,case [Course] when '语文' then 1 when '数学' then 2 when '英语' then 3 end

go

--列转行的静态方案: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 Colid

exec('select sname,[Subject],[grade] from Tb_students unpivot ([grade] for [Subject] in('+@s+'))b')

go

select

sname,[Subject],[grade]

from

Tb_students

unpivot

([grade] for [Subject] in([数学],[英语],[语文]))b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle和sql语言,SQL语言的四种类型和ORACLE运算符

数据定义语言(DDL)数据操作语言(DML)数据控制语言(DCL)事务控制语言(TCL)Data Definition Language(DDL)DDL使我们有能力创建或删除表格。也可以定义索引(键),规定表之间的链接,以及施加表间的约束。CREATE DATABASE - 创建新数据库ALTER DATABASE - 修改…

oracle的insert语句clob,.Net 操作 Oracle CLOB类型字段 INSERT 超长数据

如果仅仅在数据库中设置了类型为 CLOB 字段类型,使用普通的 INSERT 语句直接写入数据到数据库的话,它依然会将其视为 VARCHAR 类型数据,并最大长度为 4000 字符。超过该长度会报出字符串超长,写入数据失败的错误。使用 Dapper 处理…

php阅读器开发,微信小程序阅读器的简单实例开发

这篇文章主要介绍微信小程序阅读器的简单实例开发的相关资料,需要的朋友可以参考下今天和朋友聊天说到小程序,然后看在看书,然后我们就弄了个小读书的demo,然后现在分享一下。一、先来上图:首先先说下边的tabBar,项目采…

oracle存储返回sql查询,如何做才能使record类型和table类型存储查询语句返回的多条记录?...

CREATE OR REPLACE PROCEDURE Zxt_type_Study Is/*type 的使用*/Testrow1 Test%ROWTYPE;TYPE Aa IS TABLE OF Test%Rowtype;Testrow Aa : Aa();TYPE Bb IS TABLE OF Test.ac%Type;Cc Bb;Testrow2 Test%ROWTYPE;t Test.Ac%TYPE;BEGINTestrow2.Ac : a3;Testrow…

oracle10g检测未通过,win64bit安装oracle 10g版本检查未通过解决 提示要求的结果: 5.0,5.1,5.2,6.0 之一 实际结果: 6.1...

在WIN7上安装oracle 10g时&#xff0c;提示如下信息&#xff1a;正在检查操作系统要求...要求的结果: 5.0,5.1,5.2,6.0 之一实际结果: 6.1检查完成。此次检查的总体结果为: 失败 <<<<问题: Oracle Database 10g 未在当前操作系统中经过认证。建议案: 确保在正确的平…

php对扑克牌进行排序,C#代码实现扑克牌排序的几种方式

扑克牌游戏&#xff0c;总是能用到很多的手牌排序&#xff0c;总结了几种方式供参考&#xff0c;顺便记录一下方便以后使用。我做的这个是由(1-13:黑桃A-K || 14 - 26:红桃 || 27 - 39&#xff1a;梅花 || 39 - 52 : 方片 || 53.54&#xff1a;小王.大王)表示的一副扑克牌&…

oracle10g导入dmp文件恢复,oracle 10g 恢复dmp文件。

1. 在winxp下&#xff0c;安装10g&#xff0c;默认选择&#xff0c;一路ok。(安装前自检出现dhcp警告&#xff0c;可直接忽略)2.命令行&#xff0c;在xp下&#xff0c;输入sqlplus&#xff0c;即可启动&#xff0c;登陆用 sqlplus / as sysdba 用管理员登陆3.在恢复oracle时&am…

js十秒没有点击怎么判断_MAC口红怎么判断真假?没批号就没有生产日期,网友:品控太差...

一般来说&#xff0c;MAC的口红产品&#xff0c;底部都会有三位编码&#xff0c;这是该款口红的批号。因像MAC这类国外美妆护肤品牌&#xff0c;是不会将生产日期明确的标注在产品上&#xff0c;都是将其编码成批号&#xff0c;在标注在外包装或者产品的侧面、底部等边缘位置。…

剪辑内核linux,Linux01-Linux编辑内核定制属于自己的内核49

一、编译内核相关命令1、重装initrd文件命令&#xff1a;mkinitrd&#xff1a;creates initial ramdisk p_w_picpaths forpreloading modules格式:mkinitrd initrd文件路径 内核版本号,如:mkinitrd/boot/initrd-uname -r.img uname -r2、I/O处理命令a、命令格式说明2${parame…

go run main.go 参数_介绍一款Go项目热编译工具gowatch

使用场景在golang项目编写过程中&#xff0c;需要对项目不断的进行构建go build并调试以快速发现问题&#xff0c;而我们每次进行手动的进行go build又太重复&#xff0c;所以写了这么一个工具gowatch来实时的监听文件的改动并编译运行&#xff0c;大大提升开发效率。快速入门安…

linux 服务端口查询,linux 怎么查看服务和端口

(1)查看本机关于IPTABLES的设置情况[roottp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destinationChain RH-Fi…

python 捕获鼠标点击事件,在Python中的wx.Frame外部捕获鼠标事件

In Python using wxPython, how can I set the transparency and size of a window based on the proximity of the mouse relative to the applications window, or frame?Eg. similar to a hyperbolic zoom, or The Dock in MAC OS X? I am trying to achieve this effect …

linux cordova安装教程,cordova搭建环境

cordova搭建环境一、配置java环境变量1.安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次是安装 jdk &#xff0c;第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。(不能都安装在java文件夹的根目录下&#xff0c;jdk和jre安装在同一文件夹…

安卓rpg绅士游戏资源_海贼无双3(动作游戏)——电脑安卓单机游戏下载资源分享...

点击上方蓝字关注我们01游戏简介&#xff1a;游戏名称&#xff1a;海贼无双3其它名称&#xff1a;One Piece - Pirate Warriors 3游戏类型&#xff1a;动作游戏开发发行&#xff1a;Omega Force游戏平台&#xff1a;PC整理时间&#xff1a;2020-04-25官方网址&#xff1a;http:…

linux分区始柱号,找到了linux分区顺序错乱修复方法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我之前安装ARCH时 因为自带的CFDISK工具太烂使用了主流的FDISK和PARTED 都远远不如DISKPART满意 功能弱不说最重要的就是莫名奇妙的错误超级多 错误提示还少甚至没有 让人郁闷到极限尤其是parted 因为没光驱 硬盘安装 之前又是WIND…

11210怎么等于24_想要消耗100大卡热量,怎么做才最简单?

减肥&#xff0c;最根本的原理就是制造热量差&#xff0c;从饮食上限制热量的摄入&#xff0c;调理体质让基础代谢更高&#xff0c;运动来进一步增加消耗&#xff0c;当热量差达到7000大卡左右的时候&#xff0c;就能瘦下来1kg的纯脂肪&#xff01;美食当前&#xff0c;自然要先…

连接linux工具Mtr,Linux常用网络工具:路由扫描之mtr

除了上一篇《Linux常用网络工具&#xff1a;路由扫描之traceroute》介绍的traceroute之外&#xff0c;一般Linux还内置了另一个常用的路由扫描工具mtr。mtr在某些方面比traceroute更好用&#xff0c;它可以实时显示经过的每一跳路由的信息&#xff0c;并不断进行探测。tracerou…

redis rua解决库存问题_【150期】面试官:Redis的各项功能解决了哪些问题?

点击上方“Java面试题精选”&#xff0c;关注公众号面试刷图&#xff0c;查缺补漏>>号外&#xff1a;往期面试题&#xff0c;10篇为一个单位归置到本公众号菜单栏->面试题&#xff0c;有需要的欢迎翻阅阶段汇总集合&#xff1a;一百期面试题汇总先看一下Redis是一个什…

启动盘Linux windows,Linux 中创建 USB 启动盘来拯救 Windows 用户

人们经常要求我帮助他们恢复被锁死或损坏的 Windows 电脑。有时&#xff0c;我可以使用 Linux USB 启动盘来挂载 Windows 分区&#xff0c;然后从损坏的系统中传输和备份文件。有的时候&#xff0c;客户丢失了他们的密码或以其他方式锁死了他们的登录账户凭证。解锁账户的一种方…

vue验证整数_前端Vue中常用rules校验规则

前端Vue中常用rules校验规则1、是否合法IP地址export function validateIP(rule, value,callback) {if(value||valueundefined||valuenull){callback();}else{const reg /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\![](https://user-gold-cdn.xit…