资源描述:
《sqlserver行转列和列转行》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、1:行转列 子查询,获取一定数据集结果SELECTobjid,action,count(1)AS[count]FROMT_MyAttentionWHEREobjidIN(SELECTTOP10objidFROMT_MyAttentiontmaGROUPBYobjidORDERBYcount(1)DESC)GROUPBYobjid,action 下面用行转列语法获取最终结果 select*from (SELECTobjid,action,count(1)AS[count]FROMT_MyAttenti
2、onWHEREobjidIN(SELECTTOP10objidFROMT_MyAttentiontmaGROUPBYobjidORDERBYcount(1)DESC)GROUPBYobjid,action)tpivot(sum(count)fort.actionin([1],[2],[3],[4]))asourpivot 微软官方的图: 2:列转行 怎么把一条记录拆分成几条记录?User No. A B C1 1
3、 21 34 241 2 42 25 16RESULT:User No. Type Num1 1 A 211 1 B 341 1 C 241 2 A 421 2 B
4、 251 2 C 16declare@ttable(usserint,noint,aint,bint,cint)insertinto@tselect1,1,21,34,24unionallselect1,2,42,25,16SELECTusser,no,Type=attribute,Num=valueFROM@t UNPIVOT ( valueFORattributeIN([a],[b],[c]) )ASUPV 列转行备注valueFORatt
5、ributeIN([a],[b],[c])这句话中,a,b,c是列的名字,但是列名不能出现在上句的select语句中。-结果/*usser no Type num---- --- -------- --------1 1 a 211 1 b 341 1 c 241 2 a
6、 421 2 b 251 2 c 16*/ T-SQL语句中,PIVOT命令可以实现数据表的列转行,UNPIVOT则与其相反,实现数据的行转列。本文结合实例说明了这一过程,希望能对您有所帮助。AD:WOT2015互联网运维与开发者大会热销抢票一、使用PIVOT和UNPIVOT命令的SQLServer版本要求1.数据库的最低版本要求为SQLServer2005或更高。2.必须将数据库的兼容级别
7、设置为90或更高。3.查看我的数据库版本及兼容级别。如果不知道怎么看数据库版本或兼容级别的话可以在SQLServerManagementStudio新建一个查询窗口输入:print@@version,运行之后在我的本机上得到:MicrosoftSQLServer2008R2(RTM)-10.50.1600.1(IntelX86)Apr 2201015:53:02Copyright(c)MicrosoftCorporationExpressEditionwithAdvancedServicesonWin
8、dowsNT5.2(Build3790:ServicePack2)然后我们选择一个数据库然后右键-属性选择[选项]得到下图的信息。 在确认数据库的版本和兼容级别符合1,2点的要求后你才可以接着继续往下学习。二、使用PIVOT实现数据表的列转行1.在这里我们先构建一个测试数据表(这里使用的是临时表,以方便我们在退出会话的时候自动删除表及其数据)首先我们先设计一个表架构为#Student{学生编号[PK], 姓名,性别,所属班级}的表,然后编写如下