準(zhǔn)備工作
成都創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè)|企業(yè)網(wǎng)站維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋發(fā)電機(jī)回收等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開發(fā)品質(zhì)網(wǎng)站。
創(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)行行專列
語法
select column_name,( ) 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表達(dá)式
示例
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進(jìn)行行專列
PIVOT通過將表達(dá)式中一列中的唯一值轉(zhuǎn)換為輸出中的多個(gè)列來旋轉(zhuǎn)表值表達(dá)式。并PIVOT在最終輸出中需要的任何剩余列值上運(yùn)行聚合,PIVOT提供比一系列復(fù)雜的SELECT...CASE語句指定的語法更為簡單和可讀的語法,PIVOT執(zhí)行聚合并將可能的多行合并到輸出中的單個(gè)行中。
語法
select, [first pivoted column] as , [second pivoted column] as , ... [last pivoted column] as from (
語法解析
非聚合列。
[first pivoted column]
第一列列名。
[second pivoted column]
第二列列名。
[last pivoted column]
最后一列列名。
數(shù)據(jù)子表。
表別名。
聚合函數(shù)。
聚合函數(shù)列,用于輸出值列,最終輸出中返回的列(稱為分組列)將對其進(jìn)行分組。
[
轉(zhuǎn)換列,此列返回的唯一值將成為最終結(jié)果集中的字段。
[first pivoted column], [second pivoted column], ... [last pivoted column]
數(shù)據(jù)行中每一行行要轉(zhuǎn)換的列名。
排序規(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)換列中,則不會執(zhí)行任何計(jì)算。
2、輸出的所有列的列名的數(shù)據(jù)類型必須一致。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對創(chuàng)新互聯(lián)的支持。