楼主: newkid

[精华] 深夜独霸, 轮到我出个题目了——算24点的SQL解法

[复制链接]
论坛徽章:
3
2011新春纪念徽章
日期:2011-05-16 12:37:46ITPUB十周年纪念徽章
日期:2011-11-01 16:26:59奥运纪念徽章
日期:2012-11-01 09:04:46
141#
发表于 2012-3-2 13:46 | 只看该作者
题都看不明白的路过.

使用道具 举报

回复
论坛徽章:
3
双黄蛋
日期:2012-03-28 17:17:32复活蛋
日期:2012-06-12 18:45:45奥运会纪念徽章:摔跤
日期:2012-06-20 16:40:26
142#
发表于 2012-3-2 19:12 | 只看该作者
  1. DECLARE
  2.   val NUMBER;
  3. BEGIN
  4.   FOR str IN (SELECT e.val5 || t4.n val6
  5.                 FROM t24 t4,
  6.                      (SELECT CASE
  7.                                WHEN o3.o IN ('*', '/') THEN
  8.                                 '(' || d.val4 || ')' || o3.o
  9.                                ELSE
  10.                                 d.val4 || o3.o
  11.                              END val5
  12.                         FROM o24 o3,
  13.                              (SELECT c.val3 || t3.n val4
  14.                                 FROM t24 t3,
  15.                                      (SELECT b.val2 || o2.o val3
  16.                                         FROM o24 o2,
  17.                                              (SELECT CASE
  18.                                                        WHEN substr(a.val1,
  19.                                                                    -1) IN ('+',
  20.                                                                            '-') THEN
  21.                                                         a.val1 || t2.n || ')'
  22.                                                        ELSE
  23.                                                         a.val1 || t2.n
  24.                                                      END val2
  25.                                                 FROM t24 t2,
  26.                                                      (SELECT CASE
  27.                                                                WHEN o1.o IN ('+', '-') THEN
  28.                                                                 '(' || t1.n || o1.o
  29.                                                                ELSE
  30.                                                                 t1.n || o1.o
  31.                                                              END val1
  32.                                                         FROM t24 t1,
  33.                                                              o24 o1) a) b) c) d) e)
  34.   LOOP
  35.     EXECUTE IMMEDIATE 'select ' || str.val6 || ' from dual'
  36.       INTO val;
  37.     IF val = 24 THEN
  38.       dbms_output.put_line(to_char(str.val6));
  39.     END IF;
  40.   END LOOP;
  41. END;
复制代码

使用道具 举报

回复
论坛徽章:
3
双黄蛋
日期:2012-03-28 17:17:32复活蛋
日期:2012-06-12 18:45:45奥运会纪念徽章:摔跤
日期:2012-06-20 16:40:26
143#
发表于 2012-3-2 19:12 | 只看该作者
  1. create table t24 (n number);
  2. INSERT INTO t24 VALUES (1);
  3. INSERT INTO t24 VALUES (2);
  4. INSERT INTO t24 VALUES (3);
  5. INSERT INTO t24 VALUES (4);

  6. create table o24 (o varchar2 (1));
  7. INSERT INTO o24 VALUES ('+');
  8. INSERT INTO o24 VALUES ('-');
  9. INSERT INTO o24 VALUES ('*');
  10. INSERT INTO o24 VALUES ('/');

  11. COMMIT;
复制代码

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
144#
 楼主| 发表于 2012-3-3 03:22 | 只看该作者
楼上的动态SQL可以用dbms_aw.eval_number方法来取代求值。

使用道具 举报

回复
论坛徽章:
484
ITPUB北京香山2007年会纪念徽章
日期:2007-01-24 14:35:02ITPUB北京九华山庄2008年会纪念徽章
日期:2008-01-21 16:50:24ITPUB北京2009年会纪念徽章
日期:2009-02-09 11:42:452010新春纪念徽章
日期:2010-03-01 11:04:552010数据库技术大会纪念徽章
日期:2010-05-13 10:04:272010系统架构师大会纪念
日期:2010-09-04 13:35:54ITPUB9周年纪念徽章
日期:2010-10-08 09:28:512011新春纪念徽章
日期:2011-02-18 11:43:32ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
145#
发表于 2012-3-3 18:40 | 只看该作者
lastwinner 发表于 2008-10-2 17:42
逆向思路啊
24与其中一个数操作的结果,用另外三个数来获得
24与 其中两个数操作的结果 的结果,用另 ...

思考了一下,想出了逆向的思路,印象中以前也提过
翻翻帖子,果不其然,跟三年前还是一个思路,不过,我仍然不会写这样复杂的东东,太耗脑筋了@_@

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
146#
发表于 2012-3-7 21:24 | 只看该作者
这个不难吧
定义操作符  a+b, a-b, a*b, a/b, b-a, b/a
四张牌就两种情况 3,1 或者 2,2
三张牌就是1,2或者 2,1 两种情况

完全去重不大可能,部分还是可行的

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
147#
 楼主| 发表于 2012-3-7 22:34 | 只看该作者
lugionline 发表于 2012-3-7 21:24
这个不难吧
定义操作符  a+b, a-b, a*b, a/b, b-a, b/a
四张牌就两种情况 3,1 或者 2,2

你来露一手?
好久不见,弃暗投明了没有?还在用SQLSERVER?

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
148#
发表于 2012-3-7 22:37 | 只看该作者
自然是T-SQL,明天扔上来,我写的比较慢

使用道具 举报

回复
论坛徽章:
8
玉兔
日期:2015-11-16 10:18:00铁扇公主
日期:2015-10-27 21:47:42九尾狐狸
日期:2015-12-11 22:31:15
149#
发表于 2012-3-8 21:17 | 只看该作者
其实三张卡的情况只有2,1,不需要1,2,因为定义了6个操作符

四张牌 = 两张牌(初始)  递归 * [操作符 * (一张牌 或者 两张牌)] ,就算是五张牌也毫无压力吧 ,如果六张牌就需要预算 三张牌
  1. With
  2. CARDS (n) As
  3. (
  4.         --Select 1 Union All Select 2 Union All Select 3 Union All Select 4
  5.         --Select 1 Union All Select 4 Union All Select 5 Union All Select 6
  6.         --Select 3 Union All Select 5 Union All Select 6 Union All Select 9
  7.         --Select 2 Union All Select 7 Union All Select 8 Union All Select 9
  8.         Select 5 Union All Select 5 Union All Select 5 Union All Select 5
  9.         --Select 4 Union All Select 4 Union All Select 10 Union All Select 10
  10.         --Select 3 Union All Select 3 Union All Select 8 Union All Select 8

  11.         -- WIKI 中的经典题目
  12.         --Select 1 Union All Select 5 Union All Select 5 Union All Select 5
  13.        
  14.         --Select 2 Union All Select 4 Union All Select 10 Union All Select 10
  15.         --Select 2 Union All Select 5 Union All Select 5 Union All Select 10
  16.         --Select 2 Union All Select 7 Union All Select 7 Union All Select 10
  17.         --Select 3 Union All Select 3 Union All Select 7 Union All Select 7
  18.         --Select 4 Union All Select 4 Union All Select 7 Union All Select 7
  19.         --Select 2 Union All Select 2 Union All Select 11 Union All Select 11
  20.         --Select 2 Union All Select 2 Union All Select 13 Union All Select 13
  21.         --Select 1 Union All Select 3 Union All Select 4 Union All Select 6
  22.         --Select 2 Union All Select 3 Union All Select 5 Union All Select 12
  23.        
  24.         --Select 1 Union All Select 3 Union All Select 9 Union All Select 10
  25.         --Select 7 Union All Select 8 Union All Select 8 Union All Select 10
  26.         --Select 9 Union All Select 11 Union All Select 12 Union All Select 12
  27.         --Select 1 Union All Select 2 Union All Select 7 Union All Select 7
  28.         --Select 3 Union All Select 8 Union All Select 8 Union All Select 10
  29.         --Select 4 Union All Select 8 Union All Select 8 Union All Select 11
  30.         --Select 5 Union All Select 10 Union All Select 10 Union All Select 13
  31.         --Select 1 Union All Select 5 Union All Select 11 Union All Select 11
  32.         --Select 1 Union All Select 6 Union All Select 11 Union All Select 13
  33.         --Select 1 Union All Select 7 Union All Select 13 Union All Select 13
  34. ),
  35. OP (ID, OPER, PRIO) As
  36. (
  37.         Select 1, '+', 1 Union
  38.         Select 2, '-', 1 Union
  39.         Select 3, '*', 0 Union
  40.         Select 4, '/', 0 Union
  41.         Select 5, '-', 1 Union -- b - a
  42.         Select 6, '/', 0       -- b / a
  43. ),
  44. CARD1 (EXPR, VAL, PRIO, MASK, USED, OPER) As
  45. (
  46.         Select Cast(n As Varchar), Cast(n As Decimal(18, 4)), 0,
  47.         Power(2, ROW_NUMBER() Over (Order By n) - 1), 1, '' From CARDS
  48. ),
  49. CARD2 (EXPR, VAL, PRIO, MASK, USED, OPER) As
  50. (
  51.         Select Distinct
  52.                 C1.EXPR + OP.OPER + C2.EXPR,
  53.                 Cast(Case OP.ID
  54.                 When 1 Then C1.VAL + C2.VAL
  55.                 When 2 Then C1.VAL - C2.VAL
  56.                 When 3 Then C1.VAL * C2.VAL
  57.                 When 4 Then Case When C2.VAL = 0 Then Power(20, 4) Else C1.VAL / C2.VAL End
  58.                 End As Decimal(18, 4)) VAL,
  59.                 OP.PRIO,
  60.                 C1.MASK | C2.MASK MASK,
  61.                 C1.USED + C2.USED,
  62.                 OP.OPER
  63.         From CARD1 C1, OP, CARD1 C2
  64.         Where (C1.MASK & C2.MASK) = 0
  65.                 And OP.ID In (1,2,3,4)
  66.                 And (OP.ID Not In (1,3) Or (C1.MASK < C2.MASK))
  67. ),
  68. CARD12 (EXPR, VAL, PRIO, MASK, USED, OPER) As
  69. (
  70.         Select EXPR, VAL, PRIO, MASK, USED, OPER From CARD1
  71.         Union
  72.         Select EXPR, VAL, PRIO, MASK, USED, OPER From CARD2
  73. ),
  74. POINT (EXPR, VAL, PRIO, MASK, USED, OPER) As
  75. (
  76.         Select Cast(EXPR As Varchar), VAL, PRIO, MASK, USED, OPER From CARD2
  77.         Union All
  78.         Select
  79.                 Cast(Case When OP.ID Not In (5, 6) Then
  80.                         Case When C1.OPER <> '' And C1.PRIO > OP.PRIO
  81.                         Then '(' + C1.EXPR + ')' Else C1.EXPR End
  82.                         + OP.OPER +
  83.                         Case When C2.OPER <> '' And (C2.PRIO > OP.PRIO Or (C2.PRIO = OP.PRIO And OP.ID Not In (1, 3)))
  84.                         Then '(' + C2.EXPR + ')' Else C2.EXPR End
  85.                 Else
  86.                         Case When C2.OPER <> '' And C2.PRIO > OP.PRIO
  87.                         Then '(' + C2.EXPR + ')' Else C2.EXPR End
  88.                         + OP.OPER +
  89.                         Case When C1.OPER <> '' And (C1.PRIO > OP.PRIO Or (C1.PRIO = OP.PRIO And OP.ID Not In (1, 3)))
  90.                         Then '(' + C1.EXPR + ')' Else C1.EXPR End
  91.                 End As Varchar) EXPR,
  92.                 Cast(Case OP.ID
  93.                 When 1 Then C1.VAL + C2.VAL
  94.                 When 2 Then C1.VAL - C2.VAL
  95.                 When 3 Then C1.VAL * C2.VAL
  96.                 When 4 Then Case When C2.VAL = 0 Then Power(20, 4) Else C1.VAL / C2.VAL End
  97.                 When 5 Then C2.VAL - C1.VAL
  98.                 When 6 Then Case When C1.VAL = 0 Then Power(20, 4) Else C2.VAL / C1.VAl End
  99.                 End As Decimal(18, 4)) VAL,
  100.                 OP.PRIO,
  101.                 C1.MASK | C2.MASK MASK,
  102.                 C1.USED + C2.USED,
  103.                 OP.OPER
  104.         From POINT C1, OP, CARD12 C2
  105.         Where (C1.MASK & C2.MASK) = 0
  106.                 And
  107.                 (
  108.                                 (C1.USED = 2 And C2.USED = 1)
  109.                         Or        (C1.USED = 2 And C2.USED = 2)
  110.                         Or        (C1.USED = 3 And C2.USED = 1)
  111.                 )
  112.                 And C2.VAL <> Power(20, 4)
  113.                 And
  114.                 (        -- 尽量去重
  115.                                 OP.ID In (2,4,5,6)   -- - /
  116.                         Or (C1.USED > C2.USED) -- + * 但是操作数不同
  117.                         Or (C1.USED = C2.USED And C1.MASK < C2.MASK) -- + × 操作数相同,取一边
  118.                 )
  119. ),
  120. POINT24 (EXPR) As
  121. (
  122.         Select Distinct EXPR From POINT
  123.         Where        Abs(VAL - 24) < 0.04 -- 20*20*0.0001 最大可能误差
  124.                 and MASK = 1 + 2 + 4 + 8
  125. )
  126. Select * From POINT24 Order By EXPR
复制代码

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
150#
 楼主| 发表于 2012-3-9 03:06 | 只看该作者
替你翻译成ORACLE语法(11GR2以上):

With
CARDS (n) As
(
--Select 1 FROM DUAL Union All Select 2 FROM DUAL Union All Select 3 FROM DUAL Union All Select 4     FROM DUAL
--Select 1 FROM DUAL Union All Select 4 FROM DUAL Union All Select 5 FROM DUAL Union All Select 6     FROM DUAL
--Select 3 FROM DUAL Union All Select 5 FROM DUAL Union All Select 6 FROM DUAL Union All Select 9     FROM DUAL
--Select 2 FROM DUAL Union All Select 7 FROM DUAL Union All Select 8 FROM DUAL Union All Select 9     FROM DUAL
   Select 5 FROM DUAL Union All Select 5 FROM DUAL Union All Select 5 FROM DUAL Union All Select 5     FROM DUAL
--Select 4 FROM DUAL Union All Select 4 FROM DUAL Union All Select 10 FROM DUAL Union All Select 10   FROM DUAL
--Select 3 FROM DUAL Union All Select 3 FROM DUAL Union All Select 8 FROM DUAL Union All Select 8     FROM DUAL
-- WIKI 中的经典题目
--Select 1 FROM DUAL Union All Select 5 FROM DUAL Union All Select 5 FROM DUAL Union All Select 5     FROM DUAL
--Select 2 FROM DUAL Union All Select 4 FROM DUAL Union All Select 10 FROM DUAL Union All Select 10   FROM DUAL
--Select 2 FROM DUAL Union All Select 5 FROM DUAL Union All Select 5 FROM DUAL Union All Select 10    FROM DUAL
--Select 2 FROM DUAL Union All Select 7 FROM DUAL Union All Select 7 FROM DUAL Union All Select 10    FROM DUAL
--Select 3 FROM DUAL Union All Select 3 FROM DUAL Union All Select 7 FROM DUAL Union All Select 7     FROM DUAL
--Select 4 FROM DUAL Union All Select 4 FROM DUAL Union All Select 7 FROM DUAL Union All Select 7     FROM DUAL
--Select 2 FROM DUAL Union All Select 2 FROM DUAL Union All Select 11 FROM DUAL Union All Select 11   FROM DUAL
--Select 2 FROM DUAL Union All Select 2 FROM DUAL Union All Select 13 FROM DUAL Union All Select 13   FROM DUAL
--Select 1 FROM DUAL Union All Select 3 FROM DUAL Union All Select 4 FROM DUAL Union All Select 6     FROM DUAL
--Select 2 FROM DUAL Union All Select 3 FROM DUAL Union All Select 5 FROM DUAL Union All Select 12    FROM DUAL
--Select 1 FROM DUAL Union All Select 3 FROM DUAL Union All Select 9 FROM DUAL Union All Select 10    FROM DUAL
--Select 7 FROM DUAL Union All Select 8 FROM DUAL Union All Select 8 FROM DUAL Union All Select 10    FROM DUAL
--Select 9 FROM DUAL Union All Select 11 FROM DUAL Union All Select 12 FROM DUAL Union All Select 12  FROM DUAL
--Select 1 FROM DUAL Union All Select 2 FROM DUAL Union All Select 7 FROM DUAL Union All Select 7     FROM DUAL
--Select 3 FROM DUAL Union All Select 8 FROM DUAL Union All Select 8 FROM DUAL Union All Select 10    FROM DUAL
--Select 4 FROM DUAL Union All Select 8 FROM DUAL Union All Select 8 FROM DUAL Union All Select 11    FROM DUAL
--Select 5 FROM DUAL Union All Select 10 FROM DUAL Union All Select 10 FROM DUAL Union All Select 13  FROM DUAL
--Select 1 FROM DUAL Union All Select 5 FROM DUAL Union All Select 11 FROM DUAL Union All Select 11   FROM DUAL
--Select 1 FROM DUAL Union All Select 6 FROM DUAL Union All Select 11 FROM DUAL Union All Select 13   FROM DUAL
--Select 1 FROM DUAL Union All Select 7 FROM DUAL Union All Select 13 FROM DUAL Union All Select 13   FROM DUAL
),
OP (ID, OPER, PRIO) As
(
        Select 1, '+', 1 FROM DUAL Union
        Select 2, '-', 1 FROM DUAL Union
        Select 3, '*', 0 FROM DUAL Union
        Select 4, '/', 0 FROM DUAL Union
        Select 5, '-', 1 FROM DUAL Union -- b - a
        Select 6, '/', 0 FROM DUAL       -- b / a
),
CARD1 (EXPR, VAL, PRIO, MASK, USED, OPER) As
(
        Select Cast(n As Varchar2(10)), Cast(n As Decimal(18, 4)), 0,
        Power(2, ROW_NUMBER() Over (Order By n) - 1), 1, '' From CARDS
),
CARD2 (EXPR, VAL, PRIO, MASK, USED, OPER) As
(
        Select Distinct
                C1.EXPR || OP.OPER || C2.EXPR,
                Cast(Case OP.ID
                When 1 Then C1.VAL + C2.VAL
                When 2 Then C1.VAL - C2.VAL
                When 3 Then C1.VAL * C2.VAL
                When 4 Then Case When C2.VAL = 0 Then Power(20, 4) Else C1.VAL / C2.VAL End ----可以在WHERE里面过滤掉除数为0的情况
                End As Decimal(18, 4)) VAL,
                OP.PRIO,
                C1.MASK + C2.MASK MASK,
                C1.USED + C2.USED,      --------- counter 用了多少操作数
                OP.OPER
        From CARD1 C1, OP, CARD1 C2
        Where BITAND(C1.MASK, C2.MASK) = 0
                And OP.ID In (1,2,3,4)
                And (OP.ID Not In (1,3) Or (C1.MASK < C2.MASK))
),
CARD12 (EXPR, VAL, PRIO, MASK, USED, OPER) As
(
        Select EXPR, VAL, PRIO, MASK, USED, OPER From CARD1
        Union
        Select EXPR, VAL, PRIO, MASK, USED, OPER From CARD2
),
POINT (EXPR, VAL, PRIO, MASK, USED, OPER) As
(
        Select Cast(EXPR As Varchar2(10)), VAL, PRIO, MASK, USED, OPER From CARD2
        Union All
        Select
                Cast(Case When OP.ID Not In (5, 6) Then
                        Case When C1.OPER IS NOT NULL And C1.PRIO > OP.PRIO
                        Then '(' || C1.EXPR || ')' Else C1.EXPR End
                        || OP.OPER ||
                        Case When C2.OPER IS NOT NULL And (C2.PRIO > OP.PRIO Or (C2.PRIO = OP.PRIO And OP.ID Not In (1, 3)))
                        Then '(' || C2.EXPR || ')' Else C2.EXPR End
                Else
                        Case When C2.OPER IS NOT NULL And C2.PRIO > OP.PRIO
                        Then '(' || C2.EXPR || ')' Else C2.EXPR End
                        || OP.OPER ||
                        Case When C1.OPER IS NOT NULL And (C1.PRIO > OP.PRIO Or (C1.PRIO = OP.PRIO And OP.ID Not In (1, 3)))
                        Then '(' || C1.EXPR || ')' Else C1.EXPR End
                End As Varchar2(10)) EXPR,
                Cast(Case OP.ID
                When 1 Then C1.VAL + C2.VAL
                When 2 Then C1.VAL - C2.VAL
                When 3 Then C1.VAL * C2.VAL
                When 4 Then Case When C2.VAL = 0 Then Power(20, 4) Else C1.VAL / C2.VAL End  ----可以在WHERE里面过滤掉除数为0的情况
                When 5 Then C2.VAL - C1.VAL
                When 6 Then Case When C1.VAL = 0 Then Power(20, 4) Else C2.VAL / C1.VAl End
                End As Decimal(18, 4)) VAL,
                OP.PRIO,
                C1.MASK + C2.MASK MASK,
                C1.USED + C2.USED,
                OP.OPER
        From POINT C1, OP, CARD12 C2
        Where BITAND (C1.MASK, C2.MASK) = 0
                --And       ------- 既然有MASK, 可以去掉
                --(
                --                (C1.USED = 2 And C2.USED = 1)
                --        Or        (C1.USED = 2 And C2.USED = 2)
                --        Or        (C1.USED = 3 And C2.USED = 1)
                --)
                And C2.VAL <> Power(20, 4)
                And
                (        -- 尽量去重
                                OP.ID In (2,4,5,6)   -- - /
                        Or (C1.USED > C2.USED) -- + * 但是操作数不同 --------- 用一个 C1.MASK < C2.MASK 就可以了
                        Or (C1.USED = C2.USED And C1.MASK < C2.MASK) -- + × 操作数相同,取一边
                )
),
POINT24 (EXPR) As
(
        Select Distinct EXPR From POINT
        Where        Abs(VAL - 24) < 0.04 -- 20*20*0.0001 最大可能误差
                and MASK = 1 + 2 + 4 + 8
)
Select * From POINT24 Order By EXPR

加了几个注,不明白你为什会那样处理除数为零的情况,另外USED的引入也没有必要。
这个递归的思路我前面也试图使用过,但是递归SQL里面只能引用最近的一层数据,所以写不出N个操作数的通用解法。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表