读书人

sql 查询多重递归解决方案

发布时间: 2012-04-07 17:31:50 作者: rapoo

sql 查询多重递归
现有表两个


合同表 合同续期表
id Id
编号 续期日期
新合同Id
旧合同Id



现在需求是 需要拿到每份合同最后一次的续期合同 如客户2000年1月与我签订合同有效期1年,在2001年的时候客户续期2年 则 有效期 为2001年-2003年 ,当2003年的时候 客户再续期 5年 则有效期为 2003-2008年一月 现在想拿到 2003-2008年这份合同

上面的需求是拿单份合同的最后续期一份合同(以前是单递归实现)

现在的需求是拿到所有合同的最后一份续期合同 求解答

[解决办法]

SQL code
if object_id('t1')is not nulldrop table t1go create   table   t1    (          id   int   identity(1,1),        code   int,        parentcode   int    )    go    insert   t1   select   1,null    union   all   select   2,1    union   all   select   3,1    union   all   select   4,2       union   all   select   5,3      union   all   select   6,4        union   all   select   7,5   go     if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[f_cid]')   and   xtype   in   (N'FN',   N'IF',   N'TF'))    drop   function   [dbo].[f_cid]    GO      create   function   f_cid(    @id   int    )returns   @re   table(code   int,[level]   int)    as    begin    declare   @l   int    set   @l=0    insert   @re   select   @id,@l    while   @@rowcount>0    begin    set   @l=@l+1    insert   @re   select   a.code,@l    from   [t1]   a,@re   b    where   a.parentcode=b.code   and   b.[level]=@l-1    end    return    end    go        select * from t1  --调用(查询所有的子)    select   a.*,层次=b.[level]   from   [t1]   a,f_cid(2)b   where   a.code=b.code    go 

读书人网 >SQL Server

热点推荐