今天和同事聊天,同事提到了用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就是通过一个构造和一个标准行列转换组成,就不多解释了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-101097/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/4227/viewspace-101097/