表A
时间     市区代码 区县代码  一级类别  二级类别  三级类别   数量
time    area1_id  area2_id  type1_id  type2_id  type_3_id  num
200601   101       201       01          0102    010203    10
200601   101       201       01          0102    010204    20
200601   101       201       01          0103    010203    30
200601   101       201       02          0203    020203    40
200601   101       201       04          0402    040203    50
200602   101       201       01          0102    010203    15
200602   101       201       01          0102    010204    25
200602   101       201       01          0103    010303    20
200602   101       201       02          0203    020303    40
200602   101       201       04          0402    040203    40
......
......想得到如下结果: 2月份比1月份各地区各类别的变化数
time    area1_id  area2_id  type1_id  type2_id  type_3_id  add_num
200602   101       201       01          0102    010203    5
200602   101       201       01          0102    010204    5
200602   101       201       01          0103    010303    -10
200602   101       201       02          0203    020303    0
200602   101       201       04          0402    040203    -10

解决方案 »

  1.   

    select time,area1_id,area2_id,type1_id,type2_id,type_3_id,
    [num]=sum(case time when '200601' then -num when '200602' then num end)
    from 表A where time='200602' 
    group by time,area1_id,area2_id,type1_id,type2_id,type_3_id
      

  2.   

    select  '200602' as time area1_id , area2_id , type1_id , type2_id , type_3_id,sum(case  when  time='200601' then -num else num end   ) as add_num
    from 表A
    group by    area1_id , area2_id , type1_id , type2_id , type_3_id
    where time='200602' and time='200601'
      

  3.   

    select
        '200602' as time,
        area1_id,
        area2_id,
        type1_id,
        type2_id,
        type_3_id,
        sum(case time when '200601' then -num when '200602' then num else 0 end) as num
    from 
        表A
    group by
        area1_id,area2_id,type1_id,type2_id,type_3_id