婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Oracle的數據表中行轉列與列轉行的操作實例講解

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

熱門標簽:慧營銷crm外呼系統丹丹 圖吧網站地圖標注 哪個400外呼系統好 山東crm外呼系統軟件 愛客外呼系統怎么樣 百度地圖標注途經點 開發(fā)外呼系統 地圖標注養(yǎng)老院 哈爾濱電話機器人銷售招聘

行轉列
一張表

查詢結果為

--行轉列

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

顯示行轉列
姓名     時代       金額

姓名  年輕         中年       老年

張麗 1000000.00 4000000.00    500000000.00

孫子 2000000.00   12233335.00  4552220010.00

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]

顯示效果

靜態(tài)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

--動態(tài)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


列轉行

生成

sql代碼
生成靜態(tài):

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
 --列轉行的靜態(tài)方案:UNPIVOT,sql2005及以后版本
 
 SELECT sname,Subject, grade
 from dbo.Tb_students
 unpivot(grade for Subject in([語文],[數學],[英語]))as up
 GO
 
 
 --列轉行的動態(tài)方案:UNPIVOT,sql2005及以后版本
 --因為行是動態(tài)所以這里就從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

您可能感興趣的文章:
  • Python SqlAlchemy動態(tài)添加數據表字段實例解析
  • java使用JDBC動態(tài)創(chuàng)建數據表及SQL預處理的方法
  • 如何將Oracle的一個大數據表快速遷移到 Sqlserver2008數據庫(圖文教程)
  • Angualrjs和bootstrap相結合實現數據表格table
  • bootstrap table 數據表格行內修改的實現代碼
  • MySQL中大數據表增加字段的實現思路
  • mysql中數據庫與數據表編碼格式的查看、創(chuàng)建及修改
  • Android實現仿excel數據表格效果
  • MySQL清空數據表的方法實例與分析
  • jQuery EasyUI框架中的Datagrid數據表格組件結構詳解
  • MySQL中復制數據表中的數據到新表中的操作教程
  • 詳解數據庫中跨庫數據表的運算

標簽:承德 和田 開封 青島 周口 武漢 甘肅 固原

巨人網絡通訊聲明:本文標題《Oracle的數據表中行轉列與列轉行的操作實例講解》,本文關鍵詞  Oracle,的,數據表,中行,轉列,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Oracle的數據表中行轉列與列轉行的操作實例講解》相關的同類信息!
  • 本頁收集關于Oracle的數據表中行轉列與列轉行的操作實例講解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 淳安县| 托克托县| 栾川县| 佛山市| 衡南县| 公主岭市| 清水县| 化州市| 哈密市| 新化县| 文昌市| 太和县| 德格县| 外汇| 荔波县| 上饶市| 三亚市| 河曲县| 福清市| 蓝山县| 漾濞| 平凉市| 盐城市| 涿州市| 中宁县| 巴彦淖尔市| 城步| 朝阳县| 辽宁省| 溆浦县| 陆良县| 洛浦县| 都安| 乐昌市| 龙川县| 噶尔县| 贺兰县| 资阳市| 金昌市| 普宁市| 上栗县|