数据表结构如下:
CREATE TABLE [zltxSH001] (
[GroupNo] [bigint] NOT NULL ,
[data] [numeric](10, 5) NOT NULL ,
)
其中数据:
1 7
1 8
1 9
1 102 9
2 7
2 9
2 3
其中GroupNo为子组数,如上共有两组数,子组大小为4,我定义了一个求每个子组中位数的函数
(中位数,对于一组升序或降序排列的n个子组观测值X1,X2Xn,当n为奇数时,中位数等于该组数中间那个数,当n为偶数时,中位数等于中间两个数的平均值)函数定义
--参数列表:TableName,表名;n,子组大小;GroupNo,子组号
CREATE FUNCTION dbo.getMe(@TableName varchar(100),@n int,@GroupNo int)
RETURNS decimal(38,6) AS
BEGIN
declare @Data decimal(38,6),@Count int,@DataTwo decimal(38,6),@i int
set @Count=@n/2+@n%2
exec sp_executesql 'declare cursorData cursor for select Data from @TableName where GroupNo=@GroupNo order by Data'
open cursorData
set @i=@Count
while(@i>0)begin
Fetch Next from cursorData
into @Data
set @i=@i-1
end
if(@Count%2=0) begin
Fetch Next from cursorData into @DataTwo
set @Data=(@Data+@DataTwo)/2
end
close cursorData
deallocate cursorData
return @Data;
END
执行:
select dbo.getMe('zltxsh001',5,1)错误提示:
服务器: 消息 557,级别 16,状态 2,过程 getMe,行 6
只有函数和扩展存储过程才能从函数内部执行。希望各位指点迷津!
CREATE TABLE [zltxSH001] (
[GroupNo] [bigint] NOT NULL ,
[data] [numeric](10, 5) NOT NULL ,
)
其中数据:
1 7
1 8
1 9
1 102 9
2 7
2 9
2 3
其中GroupNo为子组数,如上共有两组数,子组大小为4,我定义了一个求每个子组中位数的函数
(中位数,对于一组升序或降序排列的n个子组观测值X1,X2Xn,当n为奇数时,中位数等于该组数中间那个数,当n为偶数时,中位数等于中间两个数的平均值)函数定义
--参数列表:TableName,表名;n,子组大小;GroupNo,子组号
CREATE FUNCTION dbo.getMe(@TableName varchar(100),@n int,@GroupNo int)
RETURNS decimal(38,6) AS
BEGIN
declare @Data decimal(38,6),@Count int,@DataTwo decimal(38,6),@i int
set @Count=@n/2+@n%2
exec sp_executesql 'declare cursorData cursor for select Data from @TableName where GroupNo=@GroupNo order by Data'
open cursorData
set @i=@Count
while(@i>0)begin
Fetch Next from cursorData
into @Data
set @i=@i-1
end
if(@Count%2=0) begin
Fetch Next from cursorData into @DataTwo
set @Data=(@Data+@DataTwo)/2
end
close cursorData
deallocate cursorData
return @Data;
END
执行:
select dbo.getMe('zltxsh001',5,1)错误提示:
服务器: 消息 557,级别 16,状态 2,过程 getMe,行 6
只有函数和扩展存储过程才能从函数内部执行。希望各位指点迷津!
解决方案 »
- 请问如何获取某窗体的子窗体(子控件)的句柄
- 2000字+10000多字符源码的稿件废了,散分
- ado连接sql server出现“灾难性故障”
- intraweb中使用interlockedincrement 编译提示未定义,查看帮助是win32api 函数,怎么解决.
- trackbar 的问题,简单的问题,只要回答都有分!
- 帮忙给个 InstallShield Express Custom Editon for Delphi6
- IntraWeb中如何屏蔽鼠标右键
- 怎样建立一个单元文件?
- !!!!!!!非技术问题,先声明,别骂我!
- 急、急!!!请各位大虾快快来帮我一把...........
- 一个查询问题
- “100套餐类”,怎样取出以上字符串中的数字?
@@CPU_BUSY @@TOTAL_READ
@@IDLE @@TOTAL_WRITE
@@IO_BUSY GETDATE
@@MAX_CONNECTIONS GETUTCDATE
@@PACK_RECEIVED NEWID
@@PACK_SENT RAND
@@PACKET_ERRORS TEXTPTR
@@TIMETICKS
用存储过程则不行.
也可以让某些人不说死心眼儿了,嘿嘿select IDENTITY(int,1,1) as ID,cast(QualIdenID as int) as QID,GroupNo,Data into #temp from zltxsh001 order by GroupNo,Data
select GroupNo,Data from #temp where ID%5=3
drop table #temp大家看,还有什么改进意见?要是identity能够直接在select里用那是最爽的了,现在我只能通过临时表来做这个工作;将来转到Oracle里要实现这个功能还得麻烦:(