OCP-1Z0-051 第101题 DECODE,COUNT,CASE WHEN,SUM的使用

来源:互联网 发布:淘宝如何推广最有效 编辑:程序博客网 时间:2024/06/05 20:42
一、原题
Examine the data in the PROMO_BEGIN_DATE column of the PROMOTIONS table:
PROMO_BEGIN _DATE
04-jan-00
10-jan-00
15-dec-99
18-oct-98
22-aug-99
You want to display the number of promotions started in 1999 and 2000.
Which query gives the correct output?
A.SELECT SUM(DECODE(SUBSTR(promo_begin_date, 8), '00', 1, 0)) "2000",
         SUM(DECODE(SUBSTR(promo_begin_date, 8), '99', 1, 0)) "1999"
    FROM promotions;

B.SELECT SUM(CASE TO_CHAR(promo_begin_date, 'yyyy')
             WHEN '99' THEN
              1
             ELSE
              0
           END) "1999",
       SUM(CASE TO_CHAR(promo_begin_date, 'yyyy')
             WHEN '00' THEN
              1
             ELSE
              0
           END) "2000"
  FROM promotions;

C.
SELECT COUNT(CASE TO_CHAR(promo_begin_date, 'yyyy')
                WHEN '99' THEN
                 1
                ELSE
                 0
               END) "1999",
          COUNT(CASE TO_CHAR(promo_begin_date, 'yyyy')
                 WHEN '00' THEN
                  1
                 ELSE
                  0
               END) "2000"
   FROM promotions;

D.SELECT COUNT(DECODE(SUBSTR(TO_CHAR(promo_begin_date, 'yyyy'), 8),
                    '1999',
                    1,
                    0)) "1999",
          COUNT(DECODE(SUBSTR(TO_CHAR(promo_begin_date, 'yyyy'), 8),
                    '2000',
                    1,
                    0)) "2000"
    FROM promotions;

答案:A

二、题目翻译
查看PROMOTIONS表中PROMO_BEGIN_DATE列的数据
要显示在1999 和2000年开始的promotions的数量
下面哪一个查询给出正确结果?

三、题目解析
B和C选项不正确,TO_CHAR(promo_begin_date, 'yyyy')这个结果就是年显示成四位,但和后面的'00'比较,肯定比对不上。
D选项不正确,SUBSTR(TO_CHAR(promo_begin_date, 'yyyy'), 8),to_char的结果只有4个字符了,截取字符的时候,从第8位开始,明显不对,超出范围。

DECODE的用法,详见:
         http://blog.csdn.net/holly2008/article/details/23140591

0 0
原创粉丝点击