SqlServer普通行列转换Word格式.docx

上传人:b****6 文档编号:18665811 上传时间:2022-12-31 格式:DOCX 页数:6 大小:16.65KB
下载 相关 举报
SqlServer普通行列转换Word格式.docx_第1页
第1页 / 共6页
SqlServer普通行列转换Word格式.docx_第2页
第2页 / 共6页
SqlServer普通行列转换Word格式.docx_第3页
第3页 / 共6页
SqlServer普通行列转换Word格式.docx_第4页
第4页 / 共6页
SqlServer普通行列转换Word格式.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

SqlServer普通行列转换Word格式.docx

《SqlServer普通行列转换Word格式.docx》由会员分享,可在线阅读,更多相关《SqlServer普通行列转换Word格式.docx(6页珍藏版)》请在冰豆网上搜索。

SqlServer普通行列转换Word格式.docx

张三数学83

张三物理93

李四语文74

李四数学84

李四物理94

想变成(得到如下结果):

姓名语文数学物理

----------------

李四748494

张三748393

-------------------

*/

createtabletb(姓名varchar(10),课程varchar(10),分数int)

insertintotbvalues('

张三'

'

语文'

74)

数学'

83)

物理'

93)

李四'

84)

94)

go

--SQLSERVER2000静态SQL,指课程只有语文、数学、物理这三门课程。

(以下同)

select姓名as姓名,

max(case课程when'

then分数else0end)语文,

then分数else0end)数学,

then分数else0end)物理

fromtb

groupby姓名

--SQLSERVER2000动态SQL,指课程不止语文、数学、物理这三门课程。

declare@sqlvarchar(8000)

set@sql='

select姓名'

select@sql=@sql+'

max(case课程when'

'

+课程+'

then分数else0end)['

]'

from(selectdistinct课程fromtb)asa

set@sql=@sql+'

fromtbgroupby姓名'

exec(@sql)

--SQLSERVER2005静态SQL。

select*from(select*fromtb)apivot(max(分数)for课程in(语文,数学,物理))b

--SQLSERVER2005动态SQL。

select@sql=isnull(@sql+'

],['

)+课程fromtbgroupby课程

['

+@sql+'

exec('

select*from(select*fromtb)apivot(max(分数)for课程in('

))b'

---------------------------------

在上述结果的基础上加平均分,总分,得到如下结果:

姓名语文数学物理平均分总分

--------------------------

李四74849484.00252

张三74839383.33250

--SQLSERVER2000静态SQL。

select姓名姓名,

then分数else0end)物理,

cast(avg(分数*1.0)asdecimal(18,2))平均分,

sum(分数)总分

--SQLSERVER2000动态SQL。

cast(avg(分数*1.0)asdecimal(18,2))平均分,sum(分数)总分fromtbgroupby姓名'

selectm.*,n.平均分,n.总分from

(select*from(select*fromtb)apivot(max(分数)for课程in(语文,数学,物理))b)m,

(select姓名,cast(avg(分数*1.0)asdecimal(18,2))平均分,sum(分数)总分fromtbgroupby姓名)n

wherem.姓名=n.姓名

'

(select*from(select*fromtb)apivot(max(分数)for课程in('

))b)m,

wherem.姓名=n.姓名'

droptabletb

------------------

如果上述两表互相换一下:

即表结构和数据为:

张三74    

李四74    

------------

--------------

createtabletb(姓名varchar(10),语文int,数学int,物理int)

74,83,93)

74,84,94)

select*from

select姓名,课程='

分数=语文fromtb

unionall

分数=数学fromtb

分数=物理fromtb

)t

orderby姓名,case课程when'

then1when'

then2when'

then3end

--调用系统表动态生态。

unionall'

)+'

select姓名,[课程]='

+quotename(Name,'

)+'

[分数]='

+quotename(Name)+'

fromtb'

fromsyscolumns

wherename!

=N'

姓名'

andID=object_id('

tb'

)--表名tb,不包含列名为姓名的其它列

orderbycolidasc

exec(@sql+'

orderby姓名'

select姓名,课程,分数fromtbunpivot(分数for课程in([语文],[数学],[物理]))t

--SQLSERVER2005动态SQL,同SQLSERVER2000动态SQL。

--------------------

在上述的结果上加个平均分,总分,得到如下结果:

姓名课程分数

----------------

李四语文74.00

李四数学84.00

李四物理94.00

李四平均分84.00

李四总分252.00

张三语文74.00

张三数学83.00

张三物理93.00

张三平均分83.33

张三总分250.00

select姓名as姓名,课程='

平均分'

分数=cast((语文+数学+物理)*1.0/3asdecimal(18,2))fromtb

总分'

分数=语文+数学+物理fromtb

then3when'

then4when'

then5end

droptabletb

 

不锈钢排水沟z5y9JtKrZLNF

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 节日庆典

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1