科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道讲解数据库中行级转换成列级的实际应用

讲解数据库中行级转换成列级的实际应用

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将为大家讲解数据库中行级转换成列级的实际应用。

作者:赛迪网 袁小溪 来源:天新网 2008年3月20日

关键字: Mssql SQL SQL Server 数据库

  • 评论
  • 分享微博
  • 分享邮件

    讲解数据库中行级转换成列级的实际应用:

  首先,我们需要建立一个表,详细内容请参考下文:  

create table score
(
   Name    varchar(10),
   Subject varchar(10),
   Result int
)
go
 
-- Insert some data to score table
insert into score(Name , Subject , Result) values('Jason' , 'Chinese' , 74)
insert into score(Name , Subject , Result) values('Jason' , 'Math' , 83)
insert into score(Name , Subject , Result) values('Jason' , 'Physic' , 93)
insert into score(Name , Subject , Result) values('Bosco' , 'Chinese' , 74)
insert into score(Name , Subject , Result) values('Bosco' , 'Math' , 84)
insert into score(Name , Subject , Result) values('Bosco' , 'Physic' , 94)
go
 
-- useing PIVOT operator
SELECT * FROM
(    
    select Name,Subject,Result from score
) as X
PIVOT
(    
   Sum(Result) FOR Subject IN ([Chinese],[Math],[Physic])
) AS PVT
 
-- useing static SQL. There only are [Chinese],
[Math],[Physic] values in subject field
select Name,
 sum(case Subject when 'Chinese' then Result else 0 end) as [Chinese],
 sum(case Subject when 'Math' then Result else 0 end) as [Math],
 sum(case Subject when 'Physic' then Result else 0 end) as [Physic]
from score
group by Name
 
-- useing dynamic SQL. There may be some other 
values in subject field,don't limited to [Chinese],[Math],[Physic]
declare @sql varchar(2000)
set @sql = 'select Name'
select @sql = @sql + ', sum(case Subject when 
''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from score) as X
set @sql = @sql + ' from score group by Name'
exec(@sql)
    • 评论
    • 分享微博
    • 分享邮件
    闂侇収鍠曞▎銏㈡媼閵忋倖顫�

    濠碘€冲€归悘澶愬箖閵娾晜濮滈悽顖涚摃閹烩晠宕氶崶鈺傜暠闁诡垰鍘栫花锛勬喆椤ゅ弧濡澘妫楅悡娆撳嫉閳ь剟寮0渚€鐛撻柛婵呮缁楀矂骞庨埀顒勫嫉椤栨瑤绻嗛柟顓у灲缁辨繈鏌囬敐鍕杽閻犱降鍨藉Σ鍕嚊閹跺鈧﹦绱旈幋鐐参楅柡鍫灦閸嬫牗绂掔捄铏规闁哄嫷鍨遍崑宥夋儍閸曨剚浠樺ù锝嗗▕閳ь剚鏌ㄧ欢鐐寸▕鐎b晝顏遍柕鍡嫹

    重磅专题
    往期文章
    最新文章