简要咨询咨询QQ网站导航网站搜索手机站点联系我们设为首页加入收藏 

SQLServer行转列实现思路记录

来源:易贤网   阅读:1314 次  日期:2014-06-27 20:37:10

温馨提示:易贤网小编为您整理了“SQLServer行转列实现思路记录”,方便广大网友查阅!

SQLServer行转列的sql语句有很多,可以使用静态的、动态的、CaseWhen等等,均能实现。

最近面试遇到了一道面试题,顿时有点迷糊,只说出了思路,后来百度了一下,整理了一下思路,于是记录下来,方便以后学习。

相关的数据表:

1.Score表

1

2.[User]表

2

SQL语句如下:

--方法一:静态SQL

代码如下:

SELECT*FROM

(SELECTUID,Name,Score,ScoreNameFROMScore,[User]WHEREScore.UID=[User].ID)ASSourceTable

PIVOT(AVG(Score)FORScoreNameIN([英语],[数学]))ASa

--方法二:动态SQL

代码如下:

DECLARE@sNVARCHAR(4000)

SELECT@s=ISNULL(@s+',','')+QUOTENAME(ScoreName)

FROM(selectdistinctScoreNamefromScore)asA---列名不要重复

Declare@sqlNVARCHAR(4000)

SET@sql='

selectr.*from

(selectUID,Name,ScoreName,ScorefromScore,[User]whereScore.UID=[User].ID)ast

pivot

(

max(t.Score)

fort.ScoreNamein('+@s+')

)asr'

EXEC(@sql)

--方法三:CaseWhen

代码如下:

select

row_number()OVER(ORDERBY[User].ID)as编号,

UIDas用户编号,

Nameas姓名,

max(caseScoreNamewhen'英语'thenScoreelse0end)英语,

max(caseScoreNamewhen'数学'thenScoreelse0end)数学

fromScore,[User]WHEREScore.UID=[User].ID

groupbyUID,[User].ID,Name

更多信息请查看IT技术专栏

更多信息请查看数据库
点此处就本文及相关问题在本站进行非正式的简要咨询(便捷快速)】     【点此处查询各地各类考试咨询QQ号码及交流群
上一篇:.net+mssql制作抽奖程序思路及源码
下一篇:SQL Server数据类型char、nchar、varchar、nvarchar的区别浅析
易贤网手机网站地址:SQLServer行转列实现思路记录
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!