仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 761|回复: 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


支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
飘灵儿 该用户已被删除
沙发
发表于 2015-1-19 14:01:50 | 只看该作者
无法深入到数据库系统层面去了解和探究
乐观 该用户已被删除
板凳
发表于 2015-1-26 05:13:16 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
柔情似水 该用户已被删除
地板
发表于 2015-2-4 13:27:07 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
谁可相欹 该用户已被删除
5#
发表于 2015-2-9 23:45:25 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
简单生活 该用户已被删除
6#
发表于 2015-2-28 08:50:28 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-17 02:08:57 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
再现理想 该用户已被删除
8#
发表于 2015-3-23 17:00:17 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-6 21:13

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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