标题 | 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 |
随便看 |
|
在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。