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ù)進行行專列
語法
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提供比一系列復(fù)雜的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)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
asp.net 使用SqlBulkCopy極速插入數(shù)據(jù)到 SQL Server
今天早上reader 上收到cnblogs的訂閱里看到一個關(guān)于SQL語句快速插入的文章,提到SqlBulkCopy,感覺不錯,按他的測試SqlBulkCopy要比普通插入快近30倍,2010-04-04
sqlserver如何生成連續(xù)數(shù)值,字母,字符
這篇文章主要介紹了sqlserver如何生成連續(xù)數(shù)值,字母,字符問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
SQL Server 數(shù)據(jù)庫調(diào)整表中列的順序操作方法及遇到問題
這篇文章主要介紹了SQL Server 數(shù)據(jù)庫調(diào)整表中列的順序操作,文中給大家通過詳細步驟介紹了需求及問題描述 ,需要的朋友可以參考下2018-11-11
一個完整的SQL SERVER數(shù)據(jù)庫全文索引的示例介紹
以下是介紹SQL SERVER數(shù)據(jù)庫全文索引的示例,以pubs數(shù)據(jù)庫為例。需要的朋友參考下2013-07-07
SQLServer性能優(yōu)化--間接實現(xiàn)函數(shù)索引或者Hash索引
本文主要介紹了SQLServer性能優(yōu)化--間接實現(xiàn)函數(shù)索引或者Hash索引的解決方式。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03

