SQLServer行转列实现思路记录
来源: 阅读:864 次 日期: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技术专栏

更多信息请查看数据库
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map