用SQL實現99乘法表

yangtingkun發表於2008-01-04

今天和同事聊天,同事提到了用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章