表Pay有以下字段:
proid(项目id),payname(姓名),paytype(补偿类型),支付状态(paystate),补偿金额(paymoney),paydate(日期)
现在要求按日期的范围汇总出以下结果:
项目名称  已开折金额(paystate<>'0') 未开折金额(paystate='0') 房屋补偿(paytype='房屋补偿') 奖金  增补请问怎样才能尽可能简单的写出这个SQL语句?

解决方案 »

  1.   

    select proid,sum(case paystate when 0 then 0 else paymoney end),sum(case paystate when 0 then paymoney  else 0 end),sum(case paytype when '房屋补偿' then paymoney  else 0 end) from Pay where 日期范围条件
      

  2.   

    我写出来了,就涉及到两张表(pay与project)(project用来显示项目名称)
    用的就是case when
    可是感觉语句蛮长的,有没有更简单的?SELECT pro.ProName,SUM(PayMoney)AS PayMoney,
    SUM(CASE WHEN PayState<>'0'THEN PayMoney END)AS KMoney,
    SUM(CASE WHEN PayState='0' THEN PayMoney END)AS NKMoney,
    SUM(CASE WHEN OffType='房屋补偿' THEN PayMoney END)AS FMONEY,
    SUM(CASE WHEN OffType='奖金' THEN PayMoney END)AS JMONEY,
    SUM(CASE WHEN OffType='增补' THEN PayMoney END)AS ZMONEY
    FROM dbo.Pay p RIGHT JOIN Project pro ON p.ProID=pro.ID
    WHERE PayDDate BETWEEN '2011-04-05' AND '2012-04-19'
    GROUP BY pro.ProName
      

  3.   

    对了,那个日期,为了方便,数据库里我设计的类型是char(10),
    在这里用BETWEEN AND不用转换为时间类型吧?
    里面的所有日期的格式都是固定的2011-01-12这种char(10)格式