select
    项目,
    第一季度 = sum(case when month(时间) between  1 and  3 then 金额 else 0 end),
    第二季度 = sum(case when month(时间) between  4 and  6 then 金额 else 0 end),
    第三季度 = sum(case when month(时间) between  7 and  9 then 金额 else 0 end),
    第四季度 = sum(case when month(时间) between 10 and 12 then 金额 else 0 end)
from
    表
group by
    项目
order by
    项目

解决方案 »

  1.   

    --建立测试环境
    Create Table 表(项目 varchar(10),金额 money,时间 varchar(10))
    --插入数据
    insert into 表
    select '项目1',100,'2005-1-2' union
    select '项目2',300,'2005-2-2' union
    select '项目3',400,'2005-5-2' union
    select '项目1',200,'2005-3-6' union
    select '项目1',400,'2005-7-11' union
    select '项目3',660,'2005-9-11' union
    select '项目4',660,'2005-12-11'
    select * from 表
    --测试语句
    select 项目,
         第一季度 = sum(case (Month(时间)-1) / 3 when 0 then 金额 else 0 end),
         第二季度 = sum(case (Month(时间)-1) / 3 when 1 then 金额 else 0 end),
         第三季度 = sum(case (Month(时间)-1) / 3 when 2 then 金额 else 0 end),
         第四季度 = sum(case (Month(时间)-1) / 3 when 3 then 金额 else 0 end)
    from 表
    group by 项目
     
    --删除测试环境
    Drop Table 表--结果
    项目1 300.0000 .0000 400.0000 .0000
    项目2 300.0000 .0000 .0000 .0000
    项目3 .0000 400.0000 660.0000 .0000
    项目4 .0000 .0000 .0000 660.0000
      

  2.   

    SQL> select * from aa;MONTH           SCORE
    ---------- ----------
    30-6月 -05          1SQL> select SUM(decode(1,to_char(month,'q'),score,0))  一季度,
      2         SUM(decode(2,to_char(month,'q'),score,0))  二季度,
      3         SUM(decode(3,to_char(month,'q'),score,0))  三季度,
      4         SUM(decode(4,to_char(month,'q'),score,0))  四季度
      5  from aa
      6  /    一季度     二季度     三季度     四季度
    ---------- ---------- ---------- ----------
             0          1          0          0SQL>
      

  3.   

    一条语句没法实现,要用proc 先按项目,季度汇总,再按格式先建立统计结果空表(内容都为0)再改写
      

  4.   

    可以直接利用Depart得到季度的,不需要得到月后再去做比较的。这样效率就更高些。
      

  5.   

    --建立测试环境
    Create Table TEST(项目 Nvarchar(10),金额 Int,时间 Varchar(10))
    --插入数据
    Insert Into TEST
    Select N'项目1',100,'2005-1-2'  Union
    Select N'项目2',300,'2005-2-2'  Union
    Select N'项目3',400,'2005-5-2'  Union
    Select N'项目1',200,'2005-3-6'  Union
    Select N'项目1',400,'2005-7-11' Union
    Select N'项目3',660,'2005-9-11' Union
    Select N'项目4',660,'2005-12-11'
    --测试
    Select 项目,
         第一季度 = SUM(Case DatePart(qq,时间) When 1 Then 金额 Else 0 End),
         第二季度 = SUM(Case DatePart(qq,时间) When 2 Then 金额 Else 0 End),
         第三季度 = SUM(Case DatePart(qq,时间) When 3 Then 金额 Else 0 End),
         第四季度 = SUM(Case DatePart(qq,时间) When 4 Then 金额 Else 0 End)
    From TEST
    Group By 项目
     
    --删除测试环境
    Drop Table TEST--结果
    /*
    项目 第一季度 第二季度 第三季度 第四季度
    项目1 300 0 400 0
    项目2 300 0 0 0
    项目3 0 400 660 0
    项目4 0 0 0 660
    */