excel自定义函数:SQL Server 中 自定义函数 和 游标 应用的经典案例



这是网友问题我当时立马给出了自己解决方案但是没有想到中间有点小问题发现后经过自己仔细调试完全得到正确结果后那个网友已经结帖了代码遂成为鸡肋食的无味弃的可惜但是我觉得我代码确实还是挺经典所以整理了供各位网友欣赏
问题:


假设环境如下:

表1: ID NAME QQ PHONE

表中数据: 1 秦云 10102800 13500000

2 在路上 10378 13600000

3 LEO 10000 13900000



表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 马化腾李大伟

LEO 0

如果不算管理员那话,我是这样写

SELECT 表1.NAME AS 姓名, COUNT(表2.ID) AS 上机次数

FROM 表1 LEFT OUTER JOIN

表2 _disibledevent=>GROUP BY 表1.名称



解答:
测试用例



create table 表1( --drop table 表1

ID ,

NAME varchar(10),

QQ varchar(10),

PHONE varchar(20)

)



insert o 表1 values(1 ,\'秦云\' ,\'10102800\' ,\'13500000\')

insert o 表1 values(2 ,\'在路上\' ,\'10378\' ,\'13600000\')

insert o 表1 values(3 ,\'LEO\' ,\'10000\' ,\'13900000\')



create table 表2( --drop table 表2

ID ,

NAME varchar(10) ,

上机时间 datetime,

管理员 varchar(10)

)



insert o 表2 values(1,\'秦云\' ,cast(\'2004-1-1\' as datetime),\'李大伟\')

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

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

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

insert o 表2 values(5,\'在路上\' ,cast(\'2005-1-1\' as datetime),\'李大伟\')



部分



create function GetNameStr(@name nvarchar(10))

s nvarchar(800)

as

begin

declare @nameStr nvarchar(800)

declare @tempStr nvarchar(800)

declare @flag

declare myCur cursor for ( select 管理员 from 表2 where 表2.NAME = @name )

open myCur

fetch next from myCur o @tempStr

@flag = 0

while @@fetch_status = 0

begin

@flag = 0

begin



@nameStr = @tempStr

end



begin

@nameStr = @nameStr + \',\' + @tempStr

end

@flag = @flag + 1

fetch next from myCur o @tempStr

end

close myCur

deallocate myCur

@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





测试结果:



姓名 上机次数 管理员

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

秦云 3 李大伟,马化腾,李大伟

在路上 2 马化腾,李大伟



Tags:  sqlserver游标 sql自定义函数 自定义函数 excel自定义函数

延伸阅读

最新评论

发表评论