您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)SQL Server中怎么將行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
準(zhǔn)備工作
創(chuàng)建表
use [test1]gocreate 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)行行專列
語(yǔ)法
select column_name,<aggregation function>(<case when expression>) from database.schema.tablegroup 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)行行專列
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ù)列,用于輸出值列,最終輸出中返回的列(稱為分組列)將對(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 apivot( max(Score) for Project in ([android],[ios],[html5],[.net])) as border by b.name desc
1、如果輸出列名不能在表轉(zhuǎn)換列中,則不會(huì)執(zhí)行任何計(jì)算。
2、輸出的所有列的列名的數(shù)據(jù)類型必須一致。
看完上述內(nèi)容,你們對(duì)SQL Server中怎么將行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。