SQL Server基礎之行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)
準備工作
創(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ù)進行行專列
語法
select column_name, <aggregation function>(<case when expression>) from database.schema.table group by column_name
語法解析
column_name
數(shù)據(jù)列列名
aggregation function
聚合函數(shù),常見的有:sum,max,min,avg,count等。
case when expression
case when表達式
示例
select name, max(case project when 'android' then score end) as '安卓', max(case project when 'ios' then score end) as '蘋果', 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進行行專列
PIVOT通過將表達式中一列中的唯一值轉(zhuǎn)換為輸出中的多個列來旋轉(zhuǎn)表值表達式。并PIVOT在最終輸出中需要的任何剩余列值上運行聚合,PIVOT提供比一系列復雜的SELECT...CASE語句指定的語法更為簡單和可讀的語法,PIVOT執(zhí)行聚合并將可能的多行合并到輸出中的單個行中。
語法
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>;
語法解析
<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ù)列,用于輸出值列,最終輸出中返回的列(稱為分組列)將對其進行分組。
[<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)換后
注意事項
1、如果輸出列名不能在表轉(zhuǎn)換列中,則不會執(zhí)行任何計算。
2、輸出的所有列的列名的數(shù)據(jù)類型必須一致。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。
相關(guān)文章
SqlServer實現(xiàn)類似Oracle的before觸發(fā)器示例
本節(jié)主要介紹了SqlServer如何實現(xiàn)類似Oracle的before觸發(fā)器,需要的朋友可以參考下2014-08-08SQL Server高級內(nèi)容之子查詢和表鏈接概述及使用
子查詢就是在查詢的where子句中的判斷依據(jù)是另一個查詢的結(jié)果,表鏈接就是將多個表合成為一個表,但是不是向union一樣做結(jié)果集的合并操作,但是表鏈接可以將不同的表合并,并且共享字段,感興趣的你可以了解下本文2013-03-03sqlserver 文件數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫的比較
本文概要地從數(shù)據(jù)格式、數(shù)據(jù)庫結(jié)構(gòu)和WEB發(fā)布數(shù)據(jù)三個方面比較了文件數(shù)據(jù)庫和關(guān)系數(shù)據(jù)庫的異同,同時差別了文件數(shù)據(jù)庫和過去存儲數(shù)據(jù)的文件系統(tǒng)的不同2011-10-10分發(fā)服務器 系統(tǒng)拋出18483錯誤,未能連接服務器,因為''distributor_admin''未定義遠程登陸
錯誤18483,未能連接服務器,因為 'distributor_admin '未在該服務器上定義遠程登錄。2010-07-07用SQL腳本讀取Excel中的sheet數(shù)量及名稱的方法代碼
這篇文章介紹了用SQL腳本讀取Excel中的sheet數(shù)量及名稱的方法代碼,有需要的朋友可以參考一下2013-09-09MSSQL中進行SQL除法運算結(jié)果為小數(shù)卻顯示0的解決方法
這篇文章主要介紹了MSSQL中進行SQL除法運算結(jié)果為小數(shù)卻顯示0的解決方法,需要的朋友可以參考下2015-10-10