现在我有个表 table1 ,
记录一个月内,每个号码拨打的长途类型地域类型有3中,国际,国内,省内
号码            地域
132           国际
123           国际
123           省内
123           国内
132           国内
132           国际
145           国际
145           国内
123           国际
132           省内
145           省内
145           省内
123           国际我现在需要建立这样的一张统计表格号码 国际拨打次数 国内拨打次数 省内拨达次数这样一个号码就只会对应一条记录了。
可能的数据就是 号码 国际拨打次数 国内拨打次数 省内拨达次数
124   13            12            33
有人告诉我用select case when 可以实现,但是我还是不熟悉它的用法,哪位能指点一下啊

解决方案 »

  1.   

    OPER@tl> select * from test;       NUM AREA
    ---------- --------------------
           132 国际
           123 国际
           123 省内
           123 国内
           132 国内
           132 国际
           145 国际
           145 国内
           123 国际
           132 省内
           145 省内
           145 省内
           123 国际已选择13行。OPER@tl> select num,sum(decode(area,'国际',1,0)) "国际拨打次",
      2  sum(decode(area,'国内',1,0)) "国内拨打次",
      3  sum(decode(area,'省内',1,0)) "省内拨打次"
      4  from test
      5  group by num;       NUM 国际拨打次 国内拨打次 省内拨打次
    ---------- ---------- ---------- ----------
           123          3          1          1
           132          2          1          1
           145          1          1          2
      

  2.   

    SELECT NUM,
      SUM(CASE 地域 when '国际' 1 else 0 end) 国际拔打次数,
      SUM(CASE 地域 when '国内' 1 else 0 end) 国内拔打次数,
      SUM(CASE 地域 when '省内' 1 else 0 end) 省内拔打次数
    FROM table1
     GROUP BY num;
      

  3.   

    SELECT NUM, 
      SUM(CASE when 地域='国际' 1 else 0 end) 国际拔打次数, 
      SUM(CASE when 地域='国内' 1 else 0 end) 国内拔打次数, 
      SUM(CASE when 地域='省内' 1 else 0 end) 省内拔打次数 
    FROM table1 
    GROUP BY num;