您的位置:首页 > 其它

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

2014-05-10 08:56 477 查看
一、原题

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息