SQL Server基礎(chǔ)之行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)
準(zhǔn)備工作
創(chuàng)建表
use [test1] go create table [dbo].[student]( [id] [int] identity(1,1) not null, [name] [nvarchar](50) null, [project] [nvarchar](50) null, [score] [int] null, constraint [pk_student] primary key clustered ( [id] asc )with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary] ) on [primary] go
插入數(shù)據(jù)
insert into test1.dbo.student(name,project,score) values('張三','android','60'), ('張三','ios','70'), ('張三','html5','55'), ('張三','.net','100'), ('李四','android','60'), ('李四','ios','75'), ('李四','html5','90'), ('李四','.net','100');
使用Case When和聚合函數(shù)進(jìn)行行專(zhuān)列
語(yǔ)法
select column_name, <aggregation function>(<case when expression>) from database.schema.table group by column_name
語(yǔ)法解析
column_name
數(shù)據(jù)列列名
aggregation function
聚合函數(shù),常見(jiàn)的有:sum,max,min,avg,count等。
case when expression
case when表達(dá)式
示例
select name, max(case project when 'android' then score end) as '安卓', max(case project when 'ios' then score end) as '蘋(píng)果', max(case project when 'html5' then score end) as 'html5', max(case project when '.net' then score end) as '.net' from [test1].[dbo].[student] group by name
示例結(jié)果
轉(zhuǎn)換前
轉(zhuǎn)換后
使用PIVOT進(jìn)行行專(zhuān)列
PIVOT通過(guò)將表達(dá)式中一列中的唯一值轉(zhuǎn)換為輸出中的多個(gè)列來(lái)旋轉(zhuǎn)表值表達(dá)式。并PIVOT在最終輸出中需要的任何剩余列值上運(yùn)行聚合,PIVOT提供比一系列復(fù)雜的SELECT...CASE語(yǔ)句指定的語(yǔ)法更為簡(jiǎn)單和可讀的語(yǔ)法,PIVOT執(zhí)行聚合并將可能的多行合并到輸出中的單個(gè)行中。
語(yǔ)法
select <non-pivoted column>, [first pivoted column] as <column name>, [second pivoted column] as <column name>, ... [last pivoted column] as <column name> from (<select query that produces the data>) as <alias for the source query> pivot ( <aggregation function>(<column being aggregated>) for [<column that contains the values that will become column headers>] in ( [first pivoted column], [second pivoted column], ... [last pivoted column]) ) as <alias for the pivot table> <optional order by clause>;
語(yǔ)法解析
<non-pivoted column>
非聚合列。
[first pivoted column]
第一列列名。
[second pivoted column]
第二列列名。
[last pivoted column]
最后一列列名。
<select query that produces the data>
數(shù)據(jù)子表。
<alias for the source query>
表別名。
<aggregation function>
聚合函數(shù)。
<column being aggregated>
聚合函數(shù)列,用于輸出值列,最終輸出中返回的列(稱(chēng)為分組列)將對(duì)其進(jìn)行分組。
[<column that contains the values that will become column headers>]
轉(zhuǎn)換列,此列返回的唯一值將成為最終結(jié)果集中的字段。
[first pivoted column], [second pivoted column], ... [last pivoted column]
數(shù)據(jù)行中每一行行要轉(zhuǎn)換的列名。
<optional order by clause>
排序規(guī)則。
示例
select b.Name,b.[android],b.[ios],b.[html5],b.[.net] from (select Name,Project,Score from [test1].[dbo].[student]) as a pivot ( max(Score) for Project in ([android],[ios],[html5],[.net]) ) as b order by b.name desc
示例結(jié)果
轉(zhuǎn)換前
轉(zhuǎn)換后
注意事項(xiàng)
1、如果輸出列名不能在表轉(zhuǎn)換列中,則不會(huì)執(zhí)行任何計(jì)算。
2、輸出的所有列的列名的數(shù)據(jù)類(lèi)型必須一致。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
AspNetPager分頁(yè)控件 存儲(chǔ)過(guò)程
我用AspNetPager分頁(yè)控件,寫(xiě)的存儲(chǔ)過(guò)程2009-08-08SqlServer實(shí)現(xiàn)類(lèi)似Oracle的before觸發(fā)器示例
本節(jié)主要介紹了SqlServer如何實(shí)現(xiàn)類(lèi)似Oracle的before觸發(fā)器,需要的朋友可以參考下2014-08-08SQL Server高級(jí)內(nèi)容之子查詢(xún)和表鏈接概述及使用
子查詢(xún)就是在查詢(xún)的where子句中的判斷依據(jù)是另一個(gè)查詢(xún)的結(jié)果,表鏈接就是將多個(gè)表合成為一個(gè)表,但是不是向union一樣做結(jié)果集的合并操作,但是表鏈接可以將不同的表合并,并且共享字段,感興趣的你可以了解下本文2013-03-03sqlserver 文件數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù)的比較
本文概要地從數(shù)據(jù)格式、數(shù)據(jù)庫(kù)結(jié)構(gòu)和WEB發(fā)布數(shù)據(jù)三個(gè)方面比較了文件數(shù)據(jù)庫(kù)和關(guān)系數(shù)據(jù)庫(kù)的異同,同時(shí)差別了文件數(shù)據(jù)庫(kù)和過(guò)去存儲(chǔ)數(shù)據(jù)的文件系統(tǒng)的不同2011-10-10分發(fā)服務(wù)器 系統(tǒng)拋出18483錯(cuò)誤,未能連接服務(wù)器,因?yàn)?'distributor_admin''未定義遠(yuǎn)程登陸
錯(cuò)誤18483,未能連接服務(wù)器,因?yàn)?'distributor_admin '未在該服務(wù)器上定義遠(yuǎn)程登錄。2010-07-07用SQL腳本讀取Excel中的sheet數(shù)量及名稱(chēng)的方法代碼
這篇文章介紹了用SQL腳本讀取Excel中的sheet數(shù)量及名稱(chēng)的方法代碼,有需要的朋友可以參考一下2013-09-09三種SQL分頁(yè)查詢(xún)的存儲(chǔ)過(guò)程代碼
三種SQL分頁(yè)查詢(xún)的存儲(chǔ)過(guò)程代碼,需要的朋友可以參考下。2011-12-12MSSQL中進(jìn)行SQL除法運(yùn)算結(jié)果為小數(shù)卻顯示0的解決方法
這篇文章主要介紹了MSSQL中進(jìn)行SQL除法運(yùn)算結(jié)果為小數(shù)卻顯示0的解決方法,需要的朋友可以參考下2015-10-10