用存儲(chǔ)過程和臨時(shí)表來(lái)寫,主要是想最后一個(gè)select出來(lái)結(jié)果,而且排成想要的三角形形狀。 由于BIGINT數(shù)據(jù)的限制,最多可以顯示67層。 結(jié)果 id ----------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- 1 1 2 1 1 3 1 2 1 4
用存儲(chǔ)過程和臨時(shí)表來(lái)寫,主要是想最后一個(gè)select出來(lái)結(jié)果,而且排成想要的三角形形狀。 由于BIGINT數(shù)據(jù)的限制,最多可以顯示67層。CREATE proc #pr_YangHui @c int as /* SQL實(shí)現(xiàn)顯示楊輝三角 */ /* 版本: 1.0 */ /* 作者: Haiwer */ /* 版權(quán)所有 */ /* 2006.05.10 */ set nocount on if @c<2 return --兩層以下就不排了 declare @i int declare @j int declare @sql varchar(8000) declare @sql1 varchar(8000) declare @sql2 varchar(8000) create table #(id int IDENTITY(1,1),a50000 bigint) insert #(a50000) values (1) --第一層 set @i=2 while @i<=@c begin --為了實(shí)現(xiàn)動(dòng)態(tài)層,只好動(dòng)態(tài)修改臨時(shí)表結(jié)構(gòu) set @sql='alter table # add a'+cast(50000+@i-1 as varchar(10))+' bigint,a'+cast(50000-@i+1 as varchar(10))+' bigint' exec (@sql) set @sql1='' set @sql2='' set @j=@i-1 while @j>=0 begin --這里判斷有點(diǎn)亂 if @j=0 set @sql1=@sql1+',a'+cast(50000-@j as varchar(10)) else set @sql1=@sql1+',a'+cast(50000-@j as varchar(10))+',a'+cast(50000+@j as varchar(10)) if @j=@i-1 set @sql2=@sql2+',1,1' else if @j=0 set @sql2=@sql2+',a'+cast(50000-@j-1 as varchar(10))+'+a'+cast(50000-@j+1 as varchar(10)) else set @sql2=@sql2+',a'+cast(50000-@j-1 as varchar(10))+'+a'+cast(50000-@j+1 as varchar(10))+',a'+cast(50000+@j-1 as varchar(10))+'+a'+cast(50000+@j+1 as varchar(10)) set @j=@j-2 end --去掉多余的逗號(hào) set @sql1=right(@sql1,len(@sql1)-1) set @sql2=right(@sql2,len(@sql2)-1) set @sql=cast(@i-1 as varchar(10)) exec('insert #('+@sql1+') select '+@sql2+' from # where id='+@sql) set @i=@i+1 end set @i=50000-@c+1 set @j=50000+@c-1 set @sql='' --去最長(zhǎng)的數(shù)據(jù),就是為了節(jié)省顯示空間 select @sql1=CAST(len(cast(max(a50000) as varchar(50)))+1 AS VARCHAR(10)) from # while @i<=@j begin set @sql=@sql+',isnull(cast(a'+cast(@i as varchar(10))+' as varchar('+@sql1+')),'''')' set @i=@i+1 end exec ('select id'+@sql+' from # order by id') drop table # GO --調(diào)用 exec #pr_YangHui 8
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com