sqlserver行列转换pivot、unpivot以及与sql2000比较

sqlserver行列转换pivot、unpivot以及与sql2000比较

ID:34726045

大小:127.68 KB

页数:8页

时间:2019-03-10

sqlserver行列转换pivot、unpivot以及与sql2000比较_第1页
sqlserver行列转换pivot、unpivot以及与sql2000比较_第2页
sqlserver行列转换pivot、unpivot以及与sql2000比较_第3页
sqlserver行列转换pivot、unpivot以及与sql2000比较_第4页
sqlserver行列转换pivot、unpivot以及与sql2000比较_第5页
资源描述:

《sqlserver行列转换pivot、unpivot以及与sql2000比较》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、SQLServer行列转换PivotUnPivot以及与sql2000比较PIVOT用于将列值旋转为列名(即行转列),在SQLServer2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是:PIVOT(聚合函数(列)FOR列in(…))ASP完整语法:table_sourcePIVOT(聚合函数(value_column)FORpivot_columnIN()) UNPIVOT用于将列明转为列值(即列转行),在SQLServer2000可以用UNION来实现完整语法:table_sourceU

2、NPIVOT(value_columnFORpivot_columnIN()) 注意:PIVOT、UNPIVOT是SQLServer2005的语法,使用需修改数据库兼容级别 在数据库属性->选项->兼容级别改为 90 典型实例一、行转列1、建立表格ifobject_id('tb')isnotnulldroptabletbgocreatetabletb(姓名varchar(10),课程varchar(10),分数int)insertintotbvalues('张三','语文',74)insertintotbv

3、alues('张三','数学',83)insertintotbvalues('张三','物理',93)insertintotbvalues('李四','语文',74)insertintotbvalues('李四','数学',84)insertintotbvalues('李四','物理',94)goselect*fromtbgo姓名       课程       分数-------------------------------张三       语文       74张三       数学       83张三       物理   

4、    93李四       语文       74李四       数学       84李四       物理       94 2、使用SQLServer2000静态SQL--cselect姓名, max(case课程when'语文'then分数else0end)语文, max(case课程when'数学'then分数else0end)数学, max(case课程when'物理'then分数else0end)物理fromtbgroupby姓名姓名       语文        数学        物理------------

5、-------------------------------李四       74         84         94张三       74         83         93 3、使用SQLServer2000动态SQL--SQLSERVER2000动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)--变量按sql语言顺序赋值declare@sqlvarchar(500)set@sql='select姓名'select@sql=@sql+',max(case课程when'''+课程+''' then分数

6、else0end)['+课程+']'from(selectdistinct课程fromtb)a--同fromtbgroupby课程,默认按课程名排序set@sql=@sql+'fromtbgroupby姓名'exec(@sql) --使用isnull(),变量先确定动态部分declare@sqlvarchar(8000)select@sql=isnull(@sql+',','')+'max(case课程when'''+课程+'''then分数else0end)['+课程+']'from(selectdistinct课程fromtb)

7、asa      set@sql='select姓名,'+@sql+'fromtbgroupby姓名'exec(@sql)姓名       数学        物理        语文-------------------------------------------李四       84         94         74张三       83         93         74 4、使用SQLServer2005静态SQLselect*fromtb pivot(max(分数)for课程in(语文,数学,物理))

8、a 5、使用SQLServer2005动态SQL--使用stuff()declare@sqlvarchar(8000)set@sql=''  --初始化变量@sqlselect@sql=@sql+','+课程fromtbgroupby

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。