网站首页  汉语字词  英语词汇  考试资料  写作素材  旧版资料

请输入您要查询的考试资料:

 

标题 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
随便看

 

在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。

 

Copyright © 2002-2024 cuapp.net All Rights Reserved
更新时间:2025/5/13 4:50:10