|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。server|函数|游标这是网友的成绩,我事先立马给出了本人的办理计划,可是没有想到两头有点小成绩,发明后经由本人细心调试,完整失掉准确了局后,谁人网友已结帖了。我的代码遂成为鸡肋,食之有趣,弃之惋惜。可是我以为我的代码的确仍是挺典范的,以是收拾了一下,供列位网友浏览。
成绩:
假定情况以下:
表1:ID,NAME,QQ,PHONE,
表中数据:1秦云1010280013500000
2在路上1037813600000
3LEO1000013900000
表2:ID,NAME,上机工夫,办理员,
表中数据:1秦云2004-1-1李年夜伟
2秦云2005-1-1马化腾
3在路上2005-1-1马化腾
4秦云2005-1-1李年夜伟
5在路上2005-1-1李年夜伟
完成目标:从表1中取一切职员列表,从表2中取上机次数和办理员.
上机职员名单上机次数办理员(上这几回机的每一个办理员都列出来)
秦云3李年夜伟,马化腾,李年夜伟
在路上2马化腾,李年夜伟
LEO0
假如不算办理员那一列的话,我是如许写的。
SELECT表1.NAMEAS姓名,COUNT(表2.ID)AS上机次数
FROM表1LEFTOUTERJOIN
表2ON表1.NAME=表2.NAME
GROUPBY表1.称号
解答:
测试用例
createtable表1(--droptable表1
IDint,
NAMEvarchar(10),
QQvarchar(10),
PHONEvarchar(20)
)
insertinto表1values(1,’秦云’,’10102800’,’13500000’)
insertinto表1values(2,’在路上’,’10378’,’13600000’)
insertinto表1values(3,’LEO’,’10000’,’13900000’)
createtable表2(--droptable表2
IDint,
NAMEvarchar(10),
上机工夫datetime,
办理员varchar(10)
)
insertinto表2values(1,’秦云’,cast(’2004-1-1’asdatetime),’李年夜伟’)
insertinto表2values(2,’秦云’,cast(’2005-1-1’asdatetime),’马化腾’)
insertinto表2values(3,’在路上’,cast(’2005-1-1’asdatetime),’马化腾’)
insertinto表2values(4,’秦云’,cast(’2005-1-1’asdatetime),’李年夜伟’)
insertinto表2values(5,’在路上’,cast(’2005-1-1’asdatetime),’李年夜伟’)
程序部分
createfunctionGetNameStr(@namenvarchar(10))
returnsnvarchar(800)
as
begin
declare@nameStrnvarchar(800)
declare@tempStrnvarchar(800)
declare@flagint
declaremyCurcursorfor(select办理员from表2where表2.NAME=@name)
openmyCur
fetchnextfrommyCurinto@tempStr
set@flag=0
while@@fetch_status=0
begin
if@flag=0
begin
set@nameStr=@tempStr
end
else
begin
set@nameStr=@nameStr+’,’+@tempStr
end
set@flag=@flag+1
fetchnextfrommyCurinto@tempStr
end
closemyCur
deallocatemyCur
return@nameStr
end
select表2.NAMEas姓名,count(ID)as上机次数,dbo.GetNameStr(表2.NAME)as办理员
from表2
where表2.NAMEin(select表1.NAMEfrom表1)
groupby表2.NAME
测试了局:
姓名上机次数办理员
--------------------------------------------------------------
秦云3李年夜伟,马化腾,李年夜伟
在路上2马化腾,李年夜伟
InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定 |
|