表t1如下:
xm   date      zc
甲   20180101  50
甲   20180205  50
甲   20180323  50
甲   20180427  50
甲   20180503  50
甲   20180618  50
乙   20180101  100
乙   20180205  100
乙   20180323  100
乙   20180427  100
乙   20180503  100
乙   20180618  100
结果要
姓名  一季度支出  二季度支出
甲    150         150
乙    300         300
语句怎么写?表t1如下:
xm   date      zc
甲   20180101  50
甲   20180205  50
甲   20180323  50
甲   20180427  50
甲   20180503  50
甲   20180618  50
乙   20180101  100
乙   20180205  100
乙   20180323  100
乙   20180427  100
乙   20180503  100
乙   20180618  100
结果要
姓名  一季度支出  二季度支出
甲    150         150
乙    300         300
语句怎么写?

解决方案 »

  1.   

    Quote: 引用 楼主 weixin_44562490 的回复:

    表t1如下:
    xm   date      zc
    甲   20180101  50
    甲   20180205  50
    甲   20180323  50
    甲   20180427  50
    甲   20180503  50
    甲   20180618  50
    乙   20180101  100
    乙   20180205  100
    乙   20180323  100
    乙   20180427  100
    乙   20180503  100
    乙   20180618  100
    结果要
    姓名  一季度支出  二季度支出
    甲    150         150
    乙    300         300
    语句怎么写?
    我用 select xm as 姓名,sum(case when to_char(date) between '20180101' and '20180331' then zc else 0 end ) as 一季度支出,
                                        sum(case when to_char(date) between '20180401' and '20180631' then zc else 0 end ) as 二季度支出
             from t1 group by xm
    提示无效月份,是不是case when 不能这样用?
      

  2.   

    with temp1 as (select xm,sum(zc) as xf,(case 
    when substring(date,5,2) between ('01,'03') then 1 
    when substring(date,5,2) between ('04,'06')  then 2
    when substring(date,5,2) between ('07,'09')  then 3
    else 4 end )as jd
    from t1 group by  xm,
    (case 
    when substring(date,5,2) between ('01,'03') then 1 
    when substring(date,5,2) between ('04,'06')  then 2
    when substring(date,5,2) between ('07,'09')  then 3
    else 4 end )as jd)
    select * from  temp1 
    pivot(sum (xf) for jd in (1,2,3,4));试试吧,没实测。
    注意 这种写法不走索引
      

  3.   

     应该是时间转换的问题,你试下我的写法:select xm,
    sum(case when substr(date,5,4) >= '0101' and substr(date,5,4) <= '0330' then 
    zc else 0 end)  as 一季度支出 ,
    sum(case when substr(date,5,4) >= '0401' and substr(date,5,4) <= '0630' then 
    zc else 0 end)  as 二季度支出 
    from t1 
    group by xm