麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Oracle > 正文

Oracle的數據表中行轉列與列轉行的操作實例講解

2024-08-29 13:58:44
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Oracle數據表中行轉列與列轉行的操作方法,這里分靜態和動態情況作出了分類討論,需要的朋友可以參考下
 

行轉列
一張表

Oracle的數據表中行轉列與列轉行的操作實例講解

查詢結果為

Oracle的數據表中行轉列與列轉行的操作實例講解

--行轉列

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 m3from 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.人員信息表包括姓名 時代  金額

Oracle的數據表中行轉列與列轉行的操作實例講解

顯示行轉列
姓名     時代       金額

姓名  年輕         中年       老年

張麗 1000000.00 4000000.00    500000000.00

孫子 2000000.00   12233335.00  4552220010.00

Oracle的數據表中行轉列與列轉行的操作實例講解

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]

Oracle的數據表中行轉列與列轉行的操作實例講解

顯示效果

Oracle的數據表中行轉列與列轉行的操作實例講解

靜態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 aset @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


列轉行

Oracle的數據表中行轉列與列轉行的操作實例講解

生成

Oracle的數據表中行轉列與列轉行的操作實例講解

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
 


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰剧19禁啪啪无遮挡大尺度 | 亚洲日本韩国精品 | 特级黄aaaaaaaaa毛片 | 九一国产精品 | 久久成人视屏 | 久久美女色视频 | 欧美另类激情 | av电影手机在线看 | 日日操夜夜操视频 | 免费观看国产精品视频 | 久久久久av69精品 | 免费一级欧美大片视频 | 国产亚洲高清视频 | 国产黄色毛片 | 国产精品久久久久久久久久 | 色婷婷a v | 成人情欲视频在线看免费 | 成人福利视频在 | 国产99免费| 超碰97人人艹 | 亚洲欧美日韩在线 | 国产午夜精品久久久 | 视频二区国产 | 看片一区 | 深夜福利视频免费观看 | 日本视频在线免费观看 | 国产成人自拍视频在线 | 国产精品久久久久久久久久久久久久久 | 爱视频福利 | 黄色一级片在线免费观看 | 国产精品久久久久久久久久10秀 | 小雪奶水翁胀公吸小说最新章节 | 亚洲电影在线播放 | 最新久久免费视频 | 久草在线观看福利视频 | 日韩视频在线视频 | 男女无套免费视频 | h视频免费观看 | 国产一区免费视频 | 永久免费毛片 | 色就色 综合偷拍区91网 |