[SQL Server] 游标的简单使用

测试用例:

表一:

ID  NAME  QQ      PHONE
------------------------------------------

1   秦云   10102800   13500000
2   在路上  10378       13600000
3   LEO   10000     13900000

表二

ID  NAME  上机时间    管理员
------------------------------------------

1   秦云   2004-01-01   李大伟
2   秦云   2005-01-01       马化腾
3   在路上  2005-01-01       马化腾
4   秦云   2005-01-01       李大伟
5   在路上  2005-01-01       李大伟
6   陈扬   2006-01-01       李彦宏

目的:从表1中取所有人员列表,从表2中取上机次数和管理员.

获取管理员拼接串

 
  
CREATE FUNCTION GetNameStr( @name NVARCHAR ( 200 ))
RETURNS NVARCHAR ( 200 )
AS
BEGIN
DECLARE @temp NVARCHAR ( 200 )
,
@reValue NVARCHAR ( 200 )

DECLARE myCur CURSOR FOR
(
SELECT 管理员 from LogInfo
WHERE NAME = N ' 秦云 '
)

OPEN myCur
FETCH NEXT FROM myCur INTO @temp

WHILE @@FETCH_STATUS = 0
BEGIN
SET @reValue = ISNULL ( @reValue + N ' , ' , '' ) + @temp

FETCH NEXT FROM myCur INTO @temp
END

CLOSE myCur
DEALLOCATE myCur

RETURN @reValue
END

主查询:

 
  
SELECT NAME, COUNT (ID) 上机次数,dbo.GetNameStr(NAME)
FROM LogInfo T2
WHERE EXISTS
(
SELECT 1
FROM StuInfo T1
WHERE T1.NAME = T2.NAME
)
GROUP BY NAME

结果:

NAME    上机次数   (无列名)

------------------------------------

秦云   3   李大伟,马化腾,李大伟
在路上  2   李大伟,马化腾,李大伟

转载于:https://www.cnblogs.com/Ryan_j/archive/2011/04/23/2025838.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值