zoukankan      html  css  js  c++  java
  • SQL杨辉三角

    declare @SQL varchar(max) 
    declare @INSERT varchar(max) 
    declare @Update varchar(max) 
    declare @n int
    set @n=8
    
    set @SQL='SELECT'
    set @INSERT=''
    set @Update=''
    
    select @SQL=@SQL+C,@INSERT=@INSERT+I from 
    (
        select case when number<>@n+1  Then
    declare @SQL varchar(max) 
    declare @INSERT varchar(max) 
    declare @Update varchar(max) 
    declare @n int
    set @n=8
    
    set @SQL='SELECT'
    set @INSERT=''
    set @Update=''
    
    select @SQL=@SQL+C,@INSERT=@INSERT+I from 
    (
        select case when number<>@n+1  Then ' NULL as ['+CAST(number as varchar)+'],' else ' 1 as ['+CAST(number as varchar)+'],' end as C,
        case when (@n+1-number)>0 Then ' INSERT INTO #t(['+CAST(@n+1-number as varchar)+'],['+CAST(@n+1+number as varchar)+'],ID) VALUES(1,1,'+CAST(number+1 as varchar)+')' else '' end as I
        from master..spt_values where type='P' and number BETWEEN 1 and @n*2+1
    )a
    
    select @Update=@Update+' Update #T set '+
    (
        select '['+CAST(number as varchar)+']=(select top 1 (CAST(['+CAST(number-1 as varchar)+'] as int)+CAST(['+CAST(number+1 as varchar)+'] as int))   from #t a where a.ID=#t.ID-1),'+''
        from master..spt_values a where type='P' and number BETWEEN aa.Min and aa.Max  order by number desc for xml path('')
    )+' ID=ID where ID='+CAST(number as varchar)
    from 
    (
        select number+3 as number,
        case when (@n+1-number)>0 Then @n+1-number else '' end as Min,
        case when (@n+1-number)>0 Then @n+1+number else '' end as Max
        from master..spt_values where type='P' and number+3  BETWEEN 0 and @n+2-1
    )aa
    set @SQL=@SQL+' 1 as ID INTO #t alter table #t alter column ['+CAST(@n+1 as varchar)+']  Int '+@INSERT+' '+@Update+' select * from #t order by ID'
    exec(@SQL)
    

      

    ' NULL as ['+CAST(number as varchar)+'],' else ' 1 as ['+CAST(number as varchar)+'],' end as C, case when (@n+1-number)>0 Then ' INSERT INTO #t(['+CAST(@n+1-number as varchar)+'],['+CAST(@n+1+number as varchar)+'],ID) VALUES(1,1,'+CAST(number+1 as varchar)+')' else '' end as I from master..spt_values where type='P' and number BETWEEN 1 and @n*2+1 )a select @Update=@Update+' Update #T set '+ ( select '['+CAST(number as varchar)+']=(select top 1 (CAST(['+CAST(number-1 as varchar)+'] as int)+CAST(['+CAST(number+1 as varchar)+'] as int)) from #t a where a.ID=#t.ID-1),'+'' from master..spt_values a where type='P' and number BETWEEN aa.Min and aa.Max order by number desc for xml path('') )+' ID=ID where ID='+CAST(number as varchar) from ( select number+3 as number, case when (@n+1-number)>0 Then @n+1-number else '' end as Min, case when (@n+1-number)>0 Then @n+1+number else '' end as Max from master..spt_values where type='P' and number+3 BETWEEN 0 and @n+2-1 )aa set @SQL=@SQL+' 1 as ID INTO #t alter table #t alter column ['+CAST(@n+1 as varchar)+'] Int '+@INSERT+' '+@Update+' select * from #t order by ID' exec(@SQL)

      

  • 相关阅读:
    聊聊 print 的前世今生
    在树莓派里搭建 Lighttpd 服务器
    如何重复执行一条命令直至运行成功?
    手把手教你Windows Linux双系统的安装与卸载
    你以为只有马云会灌鸡汤?Linux 命令行也会!
    Linux 下三种提高工作效率的文件处理技巧
    太高效了!玩了这么久的Linux,居然不知道这7个终端快捷键!
    Linux下分析bin文件的10种方法
    Linux下几个与磁盘空间和文件尺寸相关的命令
    如何让你的脚本可以在任意地方都可执行?
  • 原文地址:https://www.cnblogs.com/laojiefang/p/2532498.html
Copyright © 2011-2022 走看看