标题 | SQLServer行转列实现思路记录 |
范文 | SQLServer行转列的sql语句有很多,可以使用静态的、动态的、CaseWhen等等,均能实现。 最近面试遇到了一道面试题,顿时有点迷糊,只说出了思路,后来百度了一下,整理了一下思路,于是记录下来,方便以后学习。 相关的数据表: 1.Score表 ![]() 2.[User]表 ![]() 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 |
随便看 |
|
在线学习网范文大全提供好词好句、学习总结、工作总结、演讲稿等写作素材及范文模板,是学习及工作的有利工具。