仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 799|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之行列转换 交织表

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:28:41 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
用一个库#bak_database存放这些历史数据。转换
总结了一些有代表性的贴子,详细见http://expert.csdn.net/Expert/topic/2440/2440306.xml?temp=.6941645

1:列转为行:
eg1:
Createtabletest(namechar(10),kmchar(10),cjint)
go
inserttestvalues(张三,语文,80)
inserttestvalues(张三,数学,86)
inserttestvalues(张三,英语,75)
inserttestvalues(李四,语文,78)
inserttestvalues(李四,数学,85)
inserttestvalues(李四,英语,78)

想酿成

姓名语文数学英语
张三808675
李四788578


declare@sqlvarchar(8000)
set@sql=selectname
select@sql=@sql+,sum(casekmwhen+km+thencjend)[+km+]
from(selectdistinctkmfromtest)asa
select@sql=@sql+fromtestgroupbyname
exec(@sql)

droptabletest



eg2:
有表A,
idpid
11
12
13
21
22
31
怎样化成表B:
idpid
11,2,3
21,2
31
大概是从表B酿成A(不要用游标)
之前有类似的列子,如今找不到了,帮协助!


--1.创立一个兼并的函数
createfunctionfmerg(@idint)
returnsvarchar(8000)
as
begin
declare@strvarchar(8000)
set@str=
select@str=@str+,+cast(pidasvarchar)from表Awhereid=@id
set@str=right(@str,len(@str)-1)
return(@str)
End
go

--挪用自界说函数失掉了局
selectdistinctid,dbo.fmerg(id)from表A


2:
/***********行转列*****************/
测试:
createtablet1(aint,bint,cint,dint,eint,fint,gint,hint)
insertt1values(15,9,1,0,1,2,2,0)

declare@varchar(8000)
set@=
select@=@+rtrim(name)+fromt1unionallselectfromsyscolumnswhereid=object_id(t1)
set@=left(@,len(@)-len(fromt1unionallselect))
--print@
exec(select+@+fromt1)

a
-----------
15
9
1
0
1
2
2
0


支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-15 06:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表