游标应用

create database testtest
use testtest

create table 表1
(ID int,
name varchar(10),
qq varchar(10),
phone varchar(20)
)
  
  insert into 表1 values(1,'秦云','10102800','13500000')
  insert into 表1 values(2,'秦云','10102800','13500000')
  insert into 表1 values(2,'在路上','10378','13600000')
  
  insert into 表1 values(3   ,'LEO'     ,'10000'        ,'13900000')
  
create table 表2
(
ID int,
NAME varchar(10) ,
上机时间 datetime,
管理员 varchar(10)
)
  
insert into 表2 values(1,'秦云'   ,cast('2004-1-1' as datetime),'李大伟')

insert into 表2 values(2,'秦云'   ,cast('2005-1-1' as datetime),'马化腾')

insert into 表2 values (3,'在路上' ,cast('2005-1-1' as datetime),'马化腾')

insert into 表2 values(4,'秦云'   ,cast('2005-1-1' as datetime),'李大伟')

insert into 表2 values(5,'在路上' ,cast('2005-1-1' as datetime),'李大伟')
  
  
create function GetNameStr(@name nvarchar(10))
returns nvarchar(800)
as
begin
declare @nameStr nvarchar(800)
declare @tempStr nvarchar(800)
declare @flag int
declare myCur cursor for ( select 管理员 from 表2 where 表2.NAME = @name )
open myCur
fetch next from myCur into @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
fetch next from myCur into @tempStr
end
close myCur
deallocate myCur
return @nameStr
end

select 表2.NAME as 姓名, count(ID) as 上机次数, dbo.GetNameStr(表2.NAME) as 管理员
from 表2
where 表2.NAME in ( select 表1.NAME from 表1 )
group by 表2.NAME
  
  select * from 表1
  select * from 表2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值