sqlserver下將數(shù)據(jù)庫(kù)記錄的列記錄轉(zhuǎn)換成行記錄的方法
更新時(shí)間:2011年07月11日 20:46:21 作者:
sqlserver下將數(shù)據(jù)庫(kù)記錄的列記錄轉(zhuǎn)換成行記錄的方法分享,需要的朋友可以參考下。
假設(shè)有張學(xué)生成績(jī)表(tb)如下:
Name Subject Result
張三 語(yǔ)文 74
張三 數(shù)學(xué) 83
張三 物理 93
李四 語(yǔ)文 74
李四 數(shù)學(xué) 84
李四 物理 94
想變成
姓名 語(yǔ)文 數(shù)學(xué) 物理
---------- ----------- ----------- -----------
李四 74 84 94
張三 74 83 93
SQL 語(yǔ)句如下:
create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)
insert into tb(Name , Subject , Result) values('張三' , '語(yǔ)文' , 74)
insert into tb(Name , Subject , Result) values('張三' , '數(shù)學(xué)' , 83)
insert into tb(Name , Subject , Result) values('張三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '語(yǔ)文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '數(shù)學(xué)' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
go
--靜態(tài)SQL,指subject只有語(yǔ)文、數(shù)學(xué)、物理這三門(mén)課程。
select name 姓名,
max(case Subject when '語(yǔ)文' then result else 0 end) 語(yǔ)文,
max(case Subject when '數(shù)學(xué)' then result else 0 end) 數(shù)學(xué),
max(case Subject when '物理' then result else 0 end) 物理
from tb
group by name
--動(dòng)態(tài)SQL,指subject不止語(yǔ)文、數(shù)學(xué)、物理這三門(mén)課程。
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)
Name Subject Result
張三 語(yǔ)文 74
張三 數(shù)學(xué) 83
張三 物理 93
李四 語(yǔ)文 74
李四 數(shù)學(xué) 84
李四 物理 94
想變成
姓名 語(yǔ)文 數(shù)學(xué) 物理
---------- ----------- ----------- -----------
李四 74 84 94
張三 74 83 93
SQL 語(yǔ)句如下:
復(fù)制代碼 代碼如下:
create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)
insert into tb(Name , Subject , Result) values('張三' , '語(yǔ)文' , 74)
insert into tb(Name , Subject , Result) values('張三' , '數(shù)學(xué)' , 83)
insert into tb(Name , Subject , Result) values('張三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '語(yǔ)文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '數(shù)學(xué)' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
go
--靜態(tài)SQL,指subject只有語(yǔ)文、數(shù)學(xué)、物理這三門(mén)課程。
select name 姓名,
max(case Subject when '語(yǔ)文' then result else 0 end) 語(yǔ)文,
max(case Subject when '數(shù)學(xué)' then result else 0 end) 數(shù)學(xué),
max(case Subject when '物理' then result else 0 end) 物理
from tb
group by name
--動(dòng)態(tài)SQL,指subject不止語(yǔ)文、數(shù)學(xué)、物理這三門(mén)課程。
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)
相關(guān)文章
sqlserver合并DataTable并排除重復(fù)數(shù)據(jù)的通用方法分享
網(wǎng)上合并DataTable通用方法的文章很多,結(jié)合項(xiàng)目開(kāi)發(fā)中的常用需求,并借鑒網(wǎng)上的做法,寫(xiě)了一個(gè)合并DataTable的通用方法,主要功能是合并兩個(gè)DataTable(結(jié)構(gòu)可以不同,如字段不完全一致),并可以根據(jù)某一列值進(jìn)行排重處理2011-12-12新手SqlServer數(shù)據(jù)庫(kù)dba需要注意的一些小細(xì)節(jié)
這篇文章主要介紹了新手SqlServer數(shù)據(jù)庫(kù)dba需要注意的一些小細(xì)節(jié),本文講解了15個(gè)小細(xì)節(jié)、小技巧及需要注意的地方,需要的朋友可以參考下2015-02-02一個(gè)有趣的SQL命題 用一條語(yǔ)句切換BIT型的真假值
有個(gè)需求,用一條SQL語(yǔ)句(SQL SERVER)的,切換某個(gè)BIT字段值。也就是說(shuō)從TRUE變FALSE,從FALSE到TRUE。2009-08-08SQL?Server還原完整備份和差異備份的操作過(guò)程
這篇文章主要介紹了SQL?Server?還原?完整備份和差異備份的詳細(xì)操作,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09SQL實(shí)現(xiàn)模糊查詢的四種方法總結(jié)
本文主要介紹了SQL實(shí)現(xiàn)模糊查詢的四種方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07SQLserver刪除某數(shù)據(jù)庫(kù)中所有表實(shí)現(xiàn)思路
方便刪除數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)表,清空數(shù)據(jù)庫(kù),有些有約束,不能直接delete,因?yàn)槟菢犹kU(xiǎn)了所以需要先刪除庫(kù)中的約束,接下來(lái)提供詳細(xì)實(shí)現(xiàn)代碼,感興趣的你可以參考下哦,或許對(duì)你學(xué)習(xí)有所幫助2013-02-02MSSQL MySQL 數(shù)據(jù)庫(kù)分頁(yè)(存儲(chǔ)過(guò)程)
有關(guān)分頁(yè) SQL 的資料很多,有的使用存儲(chǔ)過(guò)程,有的使用游標(biāo)。本人不喜歡使用游標(biāo),我覺(jué)得它耗資、效率低;使用存儲(chǔ)過(guò)程是個(gè)不錯(cuò)的選擇,因?yàn)榇鎯?chǔ)過(guò)程是經(jīng)過(guò)預(yù)編譯的,執(zhí)行效率高,也更靈活2012-01-01- 在SQL語(yǔ)句中,where 子句:where t.modifier = null ,這里不可以使用NULL關(guān)鍵字,因?yàn)樗皇且粋€(gè)真正的值,它僅僅是一個(gè)符號(hào),因?yàn)樗闹凳俏粗摹?/div> 2011-04-04
MSsql每天自動(dòng)備份數(shù)據(jù)庫(kù)并每天自動(dòng)清除log的腳本
有自己服務(wù)器的朋友需要用到的東西,因?yàn)閙ssql數(shù)據(jù)需要經(jīng)常備份2008-09-09最新評(píng)論