SQL?Server縱表轉(zhuǎn)橫表的實(shí)現(xiàn)示例
概述
在使用SQL Server數(shù)據(jù)庫的過程中我們經(jīng)常會(huì)遇到需要將查詢結(jié)果從縱表轉(zhuǎn)成橫表的問題,下面將用一個(gè)簡(jiǎn)單的實(shí)例說明如何使用動(dòng)態(tài)查詢語句來解決這一問題。
先創(chuàng)建一個(gè)表并插入數(shù)據(jù)如下(縱表):
create table StudentScores
(
StudentName varchar(16),
Subject varchar(16),
Score smallint
)
insert into StudentScores
values('張三','語文',85)
insert into StudentScores
values('張三','數(shù)學(xué)',90)
insert into StudentScores
values('張三','英語',86)
insert into StudentScores
values('李四','語文',92)
insert into StudentScores
values('李四','數(shù)學(xué)',87)
insert into StudentScores
values('李四','英語',90)
此時(shí) select * from StudentScores 直接查詢結(jié)果如下:

用需要生成橫表字段名的列數(shù)據(jù)創(chuàng)建一個(gè)臨時(shí)表并去重:
select distinct Subject as Sub into #temp from StudentScores
最后使用如下語句轉(zhuǎn)成橫表:
declare @SQL varchar(max) --定義變量@SQL --拼接查詢語句 set @SQL='select StudentName,' select @SQL=@SQL+'sum(case when Subject='''+Sub+''' then Score else 0 end) as '+Sub+' , ' from #temp select @SQL= LEFT(@SQL, len(@SQL)-1) set @SQL=@SQL+ 'from StudentScores group by StudentName' --執(zhí)行查詢 exec(@SQL)
查詢結(jié)果如下:

在SQL Server中有一個(gè)內(nèi)置的函數(shù)PIVOT也能夠?qū)崿F(xiàn)同樣的查詢效果。詳細(xì)的使用方法請(qǐng)查看SQL Server行列轉(zhuǎn)換
到此這篇關(guān)于SQL Server縱表轉(zhuǎn)橫表的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SQL Server縱表轉(zhuǎn)橫表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQLServer存儲(chǔ)過程實(shí)現(xiàn)單條件分頁
本文主要介紹了SQLServer存儲(chǔ)過程實(shí)現(xiàn)單條件分頁的方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03
SQL(MSSQLSERVER)服務(wù)啟動(dòng)錯(cuò)誤代碼3414的解決方法
這篇文章主要介紹了SQL(MSSQLSERVER)服務(wù)啟動(dòng)錯(cuò)誤代碼3414的解決方法,需要的朋友可以參考下2016-03-03
sql server的一個(gè)有趣的bit位運(yùn)算分享
sql server中沒有bool類型,而是用bit類型來表示bool值,估計(jì)是為了節(jié)省存儲(chǔ)空間,下面為大家介紹下這個(gè)有趣的bit位運(yùn)算,感興趣的朋友可以參考下2013-09-09
SQL Server中T-SQL 數(shù)據(jù)類型轉(zhuǎn)換詳解
T-SQL提供了兩個(gè)顯示轉(zhuǎn)換的函數(shù):CAST函數(shù)和CONVERT函數(shù)。今天我們就來相信探討下2018-02-02
SQL?Server?DATEDIFF()?函數(shù)用法
這篇文章主要介紹了SQL?Server?DATEDIFF()?函數(shù)的定義和用法,通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
sql 取兩值之間的數(shù)據(jù)方法(例:100-200之間的數(shù)據(jù))
這里只列舉3種我測(cè)試的方法,還有別的方案就由高手補(bǔ)上了,3種方案的效率也不競(jìng)相同,我一直認(rèn)為not in效率不好,但在這里使用not in速度最快,請(qǐng)高手補(bǔ)充說明,謝謝2010-05-05
在程序中壓縮sql server2000的數(shù)據(jù)庫備份文件的代碼
在程序中壓縮sql server2000的數(shù)據(jù)庫備份文件的代碼...2007-03-03

