一个面试题

     今天同事发过来一个她弟弟遇到的面试题,正是我还没解决的竖表打横的问题。后来在BOBO大虾的指点下终于得以解决。由于原来的题目设计的表有点不符合实际,所以我做了些改变。

    

     上表是一个水果日销售表。要整理成如下形式:

    

     第一列是日期,第二列是苹果的销量,第三列是香蕉的销量。

     SQL语句如下:

      select k.SALETIME,coalesce(sum( case when k.Name = 'Apple' then k.COUNT end),0) Apple,
             coalesce(sum( case when k.Name = 'Banana' then k.count end),0) Banana
                     from Sale  k group by K.SALETIME

     我的想法是按日期分组,再计算当天苹果和香蕉的数量,我用的方法是自连接。

     select t.SALETIME,
          coalesce((select sum(count) from Sale  a where a.SALETIME=t.SALETIME and a.NAME='Apple'),0) Apple,
          coalesce((select sum(count) from Sale  a where a.SALETIME=t.SALETIME and a.NAME='Banana'),0) Banana
         from Sale  t group by t.SALETIME

      显然不如大虾的精炼。

      另外coalesce(exp1,exp2,exp3)函数用于返回第一个不为Null的值。

posted on 2008-11-27 16:24  林骄  阅读(171)  评论(0)    收藏  举报