金额合计求值问题

王朝mssql·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

金额合计求值问题

金额合计求值问题 原帖地址:

http://community.csdn.net/Expert/topic/3190/3190686.xml?temp=.6296961

表test中记录:

aa bb

001 50.5

002 60

003 15.4

004 25

005 48

...

输入任一金额,然后在表中查找是否有该金额或几条记录的合计等于该金额.

如:输入25,则要找出004,输入85,则要找出002与004,依次类推。

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

--测试数据

create table test(aa varchar(10),bb numeric(10,2))

insert test select '001',50.5

union all select '002',60

union all select '003',15.4

union all select '004',25

union all select '005',48

union all select '006',37

go

--查询函数

create function fn_search(@Num numeric(10,2))

returns @r table (aa varchar(10),bb numeric(10,2))

as

begin

declare @t table (aa varchar(8000),aa1 varchar(10),bb numeric(10,2),level int)

declare @l int

insert @r select aa,bb from test where bb=@num

if @@rowcount>0 goto lb_exit

set @l=0

insert @t select ','+aa+',',aa,bb,@l from test where bb<@num

while @@rowcount>0

begin

insert @r select distinct a.aa,a.bb

from test a,(

select a.aa,a.bb,aa1=b.aa from test a,@t b

where b.level=@l

and b.aa1<a.aa

and a.bb=@num-b.bb

)b where a.aa=b.aa or charindex(','+a.aa+',',b.aa1)>0

if @@rowcount>0 goto lb_exit

set @l=@l+1

insert @t select b.aa+a.aa+',',a.aa,a.bb+b.bb,@l

from test a,@t b

where b.level=@l-1

and b.aa1<a.aa

and a.bb<@num-b.bb

end

lb_exit:

return

end

go

--调用测试1

select * from dbo.fn_search(25)

/*--结果

aa bb

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

004 25.00

(所影响的行数为 1 行)

--*/

--调用测试2

select * from dbo.fn_search(135.5)

/*--结果

aa bb

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

001 50.50

002 60.00

004 25.00

005 48.00

006 37.00

(所影响的行数为 5 行)

--*/

--调用测试3(找不到的,无返回值)

select * from dbo.fn_search(135.7)

/*--结果

aa bb

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

(所影响的行数为 0 行)

--*/

go

drop table test

drop function fn_search

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航