create table tblmedian(iSno int identity(1,1),iMedian int)
insert into tblmedian values(20)
insert into tblmedian values(21)
insert into tblmedian values(22)
insert into tblmedian values(23)
insert into tblmedian values(24)
create function [dbo].[UDF_Find_Median]()
returns int
as
begin
declare @Cnt int
declare @MidId1 int
declare @MidId2 int
declare @Result1 int
declare @Result2 int
declare @Retval int
select @cnt=count(*) FROM tblmedian;
if(@cnt%2=1)--odd number
begin
set @midid1=floor(round(cast(@cnt as float) / cast(2 as float),0))
select @retval=imedian from (SELECT ROW_NUMBER() OVER (ORDER BY imedian) AS RowID,floor(round(imedian,0)) as imedian FROM
tblmedian)Median where rowid=@midid1;
end
else
begin
set @midid1=floor(@cnt/2);
set @midid2=(@midid1+1);
select @result1=imedian from (SELECT ROW_NUMBER() OVER (ORDER BY imedian) AS RowID,floor(round(imedian,0)) as imedian FROM
tblmedian)Median1 where rowid=@midid1;
select @result2=imedian from (SELECT ROW_NUMBER() OVER (ORDER BY imedian) AS RowID,floor(round(imedian,0)) as imedian FROM
tblmedian)Median2 where rowid=@midid2;
set @retval=floor((@result1+@result2)/2);
end
return @retval;
end
select * from tblmedian
select [dbo].[udf_find_median]()
Monday, June 14, 2010
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment