ivhb 发表于 2008-03-17 13:29

这个逻辑还算是简单,用decode会让代码看起来简洁些,
但是一般来说,decode的可读性会比较差

blackuhlan 发表于 2008-03-24 12:33

select sum( decode( port_status, "占用",1,0))/count(*) from 端口 where
related_dev_uuid="AA"

liaosnet 发表于 2008-03-24 16:00

DECODE的用法..

DECODE 表达式和 CASE 表达式类似,它能根据指定列中找到的值打印不同的结果。

阅读语法图跳过直观语法图DECODE 函数:

                     .-,---------------------------.
                     V                           |.-,--NULL------.
|--DECODE--(--expr--,----when_expr--,--+-then_expr-+-+--+--------------+--)--|
                                       '-NULL------'    '-,--else_expr-'


元素         描述         限制         语法
expr, else_expr,
then_expr,
when_expr         值和数据类型可以评估的表达式         when_expr 和 expr 的数据类型必须一致,then_expr 和 else_expr 的数据类型也必须一致。when_expr 的值不能是 NULL。         表达式,
表达式页

表达式 expr、when_expr 和 then_expr 是必需的。DECODE 对 expr 求值并把它和 when_expr 比较。如果 when_expr 的值和 expr 的值匹配,那么 DECODE 返回 then_expr。

表达式 when_expr 和 then_expr 是一个表达式对,可以在 DECODE 函数中指定任意数量的表达式对。在所有情况下,DECODE 把表达式对中的第一个成员和 expr 进行比较,如果第一个成员和 expr 匹配,就返回第二个成员。

如果没有表达式和 expr 匹配,DECODE 就返回 else_expr。如果没有表达式和 expr 匹配而且没有指定 else_expr,那么 DECODE 返回 NULL。

可以为参数指定任何数据类型,但是有两个限制:

    * 所有 when_expr 的实例必须有相同的数据类型,或者必须存在一个公共兼容类型。所有 when_expr 的实例也必须具有和 expr 相同(或兼容)的数据类型。
    * 所有 then_expr 的实例必须有相同的数据类型,或者必须存在一个公共兼容类型。所有 then_expr 的实例也必须具有和 else_expr 相同(或兼容)的数据类型。

假设一个用户要把 students 表 evaluation 列的描述值在输出中转换成数字值。下表给出了 students 表的内容。
firstname         evaluation                 firstname         evaluation
Edward         Great                 Mary         Good
Joe         Not done                 Jim         Poor

现在用户输入带有 DECODE 函数的查询,将 evaluation 列中的描述性值转换为相等的数字值:

SELECT firstname, DECODE(evaluation,
   'Poor', 0,
   'Fair', 25,
   'Good', 50,
   'Very Good', 75,
   'Great', 100,
   -1) as grade
FROM students

下表给出了这个 SELECT 语句的输出。
firstname         evaluation                 firstname         evaluation
Edward         100                 Mary         50
Joe         -1                 Jim         0
常量表达式

返回一个固定值的确定表达式称为常量表达式。其中有以下的运算符(或系统常量),它们的返回值在运行时就已确定:

    * CURRENT 从系统时钟返回当前的时间和日期:
    * CURRENT_ROLE 返回角色名称(如果有的话),该角色的特权已对当前用户启用。
    * CURRENT_ROLE 返回角色名称(如果有的话),该角色是当前用户的缺省角色。
    * DBSERVERNAME 返回当前数据库服务器名。
    * SITENAME 是 DBSERVERNAME 的同义词。
    * TODAY 从系统时钟返回当前日历日期。
    * USER 返回当前用户的登录名(也称为授权标识符)。

除了这些运算符之外,术语常量表达式还可指带引号字符串、文字值或带有操作数的 UNITS 运算符。

常量表达式具有下列语法。

阅读语法图跳过直观语法图常量表达式:

                     (1)
|--+-| Quoted String |------------------------------------------------+--|
   |                  (2)                                           |
   +-| Literal Number |-----------------------------------------------+
   +-+-USER---------------------------+-------------------------------+
   | |(3)    (4)                  |                               |
   | '---------------+-CURRENT_ROLE-+-'                               |
   |               '-DEFAULT_ROLE-'                                 |
   |(4)                                                             |
   '------+-+-SITENAME-----+----------------------------------------+-'
          | '-DBSERVERNAME-'                                        |
          +-TODAY---------------------------------------------------+
          +-CURRENT--+------------+---------------------------------+
          |          '- precision-'                                 |
          |                      (5)                              |
          +-| Literal DATETIME |------------------------------------+
          |                      (6)                              |
          +-| Literal INTERVAL |------------------------------------+
          +-num--UNITS--time_unit-----------------------------------+
          |(3)                                                    |
          '------+-+------------+--+- sequence-+-- .--+-CURRVAL-+-+-'
               | '- owner-- .-''- synonym--'      '-NEXTVAL-' |
               |                        (7)                     |
               +-| Literal Collection |-------------------------+
               |               (8)                            |
               +-| Literal Row |--------------------------------+
               +-literal opaque type----------------------------+
               '-literal BOOLEAN--------------------------------'
页: 1 [2]
查看完整版本: 这样的sql怎么写!求两个sql的比!