博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过SQL绘制杨辉三角
阅读量:4978 次
发布时间:2019-06-12

本文共 2029 字,大约阅读时间需要 6 分钟。

无意中在csdn上看到一帖有,感觉很有意思。后来自己想下不借助临时表,根据杨辉三角的组合数计算方法C(n,m)=n!/[m!(n-m)!],进行绘制。

以下是完整的SQL代码:

use tempdbgoset nocount ondeclare @rows int=10, --行数,根据实际来控制        @x int=1,@y int=1,@sql nvarchar(max),@cols int /*根据杨辉三角的组合数计算方法:C(n,m)=n!/[m!(n-m)!]进行绘制参照:http://baike.baidu.com/view/7804.htm*/ set @cols=@rows*2-1;with cte_n as(    select r from (select row_number() over(order by a.object_id) as r from sys.all_columns a ) x where r<=@rows*2),cte_1 as(select n.r,b.data_lse            from cte_n n                cross apply(select 'select '+stuff((select ',rtrim('+isnull(F1.v+'/(('+F2.v+')*'+F3.v+')','''''') +') as '+quotename(isnull(nullif((m.r +(@rows-n.r)+(m.r-1)*1)%@cols,0),@cols))                                from cte_n m                                    outer apply(select stuff((select '*'+rtrim(i.r) from cte_n i where i.r<=isnull((nullif(n.r-1,0)),1) for xml path('')),1,1,'') as v                                        ) F1                                    outer apply(select stuff((select '*'+rtrim(i.r) from cte_n i where i.r<=isnull((nullif(m.r-1,0)),1) for xml path('')),1,1,'') as v                                        ) F2                                    outer apply(select stuff((select '*'+rtrim(i.r) from cte_n i where i.r<=isnull((nullif(n.r-m.r,0)),1) for xml path('')),1,1,'') as v                                        ) F3                                where m.r<@rows*2                                order by isnull(nullif((m.r +(@rows-n.r)+(m.r-1)*1)%@cols,0),@cols) asc                                for xml path('')                                                                    ),1,1,'') as data_lse                            )b                where n.r <=@rows            )     select @sql=isnull(@sql+' union all ','')+data_lse from  cte_1exec(@sql)

注】当前脚本在SQL Server 2012上测试通过

效果图:

 

这方法虽然没有借助临时表,也有一个最大的不足就是不能设置太多行,因为在公式(C(n,m)=n!/[m!(n-m)!])中有n! 和m! 算式,设置行数太多会导致阶乘数据太大,发生数据类型转换溢出。有时间再想办法看能否从表示式中"/"除位置进行优化。

 

 

 

 

 

转载于:https://www.cnblogs.com/wghao/archive/2013/04/10/3013431.html

你可能感兴趣的文章
iOS 之sdwebimage
查看>>
Spring Boot 2 快速教程:WebFlux 快速入门(二)
查看>>
ASP.NET XML与JSON
查看>>
java程序员面试----交流项目经验(摘自百度)
查看>>
01-语言入门-01-A+B Problem
查看>>
冒泡排序--c#
查看>>
Wi-Fi与WAPI主要区别
查看>>
Git详解之六:Git工具
查看>>
一个好用的PHOTOSHOP切图插件(CutterMan插件下载)
查看>>
android 引入开源项目
查看>>
《Flask Web开发——基于Python的Web应用开发实践》一字一句上机实践(下)
查看>>
js 自定义方法 设置可选参数的方法
查看>>
Oracle分页查询
查看>>
Python + 装饰器 + @
查看>>
FormsAuthentication.RedirectFromLoginPage 登录
查看>>
2012.05.16
查看>>
前端自动化测试之UI RECORDER(二、PC录制)
查看>>
Linq基本查询操作--帅选
查看>>
hdu 3496 二维费用的01背包
查看>>
poj 3159 差分约束+spfa
查看>>