li
  当前位置:主页 > 性能优化 > 文章内容
li
用SQL实现99乘法表
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:2  

今天和同事聊天,同事提到了用SQL实现99乘法表。当时我觉得应该很简单,于是尝试了一下,结果这么简单的SQL居然用了10分钟才搞定。


SQL实现如下:

SQL> COL A FORMAT A6
SQL> COL B FORMAT A6
SQL> COL C FORMAT A6
SQL> COL D FORMAT A6
SQL> COL E FORMAT A6
SQL> COL F FORMAT A6
SQL> COL G FORMAT A6
SQL> COL H FORMAT A6
SQL> COL I FORMAT A6
SQL> WITH
2 NUMS AS (SELECT ROWNUM NUM FROM DUAL CONNECT BY LEVEL < 10)
3 SELECT
4 MAX(DECODE(A, 1, EXP)) A,
5 MAX(DECODE(A, 2, EXP)) B,
6 MAX(DECODE(A, 3, EXP)) C,
7 MAX(DECODE(A, 4, EXP)) D,
8 MAX(DECODE(A, 5, EXP)) E,
9 MAX(DECODE(A, 6, EXP)) F,
10 MAX(DECODE(A, 7, EXP)) G,
11 MAX(DECODE(A, 8, EXP)) H,
12 MAX(DECODE(A, 9, EXP)) I
13 FROM
14 (
15 SELECT
16 A.NUM A,
17 B.NUM B,
18 A.NUM || '*' || B.NUM || '=' || A.NUM * B.NUM EXP
19 FROM
20 NUMS A,
21 NUMS B
22 WHERE A.NUM <= B.NUM
23 )
24 GROUP BY B;

A B C D E F G H I
------ ------ ------ ------ ------ ------ ------ ------ ------
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

9 rows selected.

这个SQL就是通过一个构造和一个标准行列转换组成,就不多解释了。




  上一篇: 用SQL计算100以内的质数   下一篇: 使用nlsparam的一个例子
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·用SQL计算100以内的质数
·Oracle11g物理STANDBY应用日志时...
·缺少GROUP BY表达式可以顺利执行...
·ORA-21561错误
·临时表产生REDO过多的bug
·缺少GROUP BY表达式可以顺利执行...
·使用SQL判断一个数是否质数
·9i上使用CONNECT BY访问DUAL表的...
·数据库升级造成的X_$BH状态异常问...
·表异常增大的bug
·使用nlsparam的一个例子
·用SQL解决两道有趣的题(二)
·用SQL解决两道有趣的题(一)
·RAC环境的STANDBY数据库备份报错
·2007年总结
·Oracle11g物理STANDBY打开模式应...
·Oracle11新特性——备份恢复功能...
·Oracle10g新增BLOCK CHANGE TRAC...
·ORA-600(ksmovrflow)错误
·RAC安装出现ORA-341和ORA-312错误
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接