select SaleDate as 日期,AreaId as 区域ID,areaName as 区域名称,TotalNum as 数量,TotalAmount as 金额 from View_CrystalSale 这是sql语句
结果如下
     日期                  区域ID   区域名称  数量     金额
2008-07-01 00:00:00.000 3 华东 42 77444
2008-12-01 00:00:00.000 2 华北 18 112776
2009-02-01 00:00:00.000 5 西北 40 35550
2009-07-01 00:00:00.000 4 华南 50 820000
2009-09-01 00:00:00.000 5 西北 16 12080
要求选择 年份  开始月份   结束月份和要对比的年份
然后查询结果如下
           2009年1-10月                 2010年1-10月                  09,10年(1-10月)同期对比%
           09数量  09金额  09平均单价   10数量  10金额  10平均单价     数量    金额    单价
华东       XX        XXXX   XXX           XX     XXXX    XXX           XX%     XX%     XX%
华北       XX        XXXX   XXX           XX     XXXX    XXX           XX%     XX%     XX%
西北       XX        XXXX   XXX           XX     XXXX    XXX           XX%     XX%     XX%
西北       XX        XXXX   XXX           XX     XXXX    XXX           XX%     XX%     XX%
华南       XX        XXXX   XXX           XX     XXXX    XXX           XX%     XX%     XX%
全国合计   XX        XXXX   XXX           XX     XXXX    XXX           XX%     XX%     XX%在线等大侠解答

解决方案 »

  1.   

    --后三个自己改改
    select 区域名称, 
    sum(case when year(日期) = 2009 then 数量 else 0 end) as [09数量],
    sum(case when year(日期) = 2009 then 金额 else 0 end) as [09金额],
    case sum(case when year(日期) = 2009 then 1 else 0 end) when 0 then 0 else
    sum(case when year(日期) = 2009 then 金额/数量 else 0 end)/sum(case when year(日期) = 2009 then 1 else 0 end) 
    end as [09平均单价],
    sum(case when year(日期) = 2010 then 数量 else 0 end) as [10数量],
    sum(case when year(日期) = 2010 then 金额 else 0 end) as [10金额],
    case sum(case when year(日期) = 2010 then 1 else 0 end) when 0 then 0 else
    sum(case when year(日期) = 2010 then 金额/数量 else 0 end)/sum(case when year(日期) = 2010 then 1 else 0 end) 
    end as [10平均单价]
    from [tb]
    where month(日期) not in (11,12)
    group by 区域名称