|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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
支持大型的数据库。可以处理拥有上千万条记录的大型数据库。 |
|