表Pay有以下字段:
proid(项目id),payname(姓名),paytype(补偿类型),支付状态(paystate),补偿金额(paymoney),paydate(日期)
现在要求按日期的范围汇总出以下结果:
项目名称 已开折金额(paystate<>'0') 未开折金额(paystate='0') 房屋补偿(paytype='房屋补偿') 奖金 增补请问怎样才能尽可能简单的写出这个SQL语句?
proid(项目id),payname(姓名),paytype(补偿类型),支付状态(paystate),补偿金额(paymoney),paydate(日期)
现在要求按日期的范围汇总出以下结果:
项目名称 已开折金额(paystate<>'0') 未开折金额(paystate='0') 房屋补偿(paytype='房屋补偿') 奖金 增补请问怎样才能尽可能简单的写出这个SQL语句?
用的就是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
在这里用BETWEEN AND不用转换为时间类型吧?
里面的所有日期的格式都是固定的2011-01-12这种char(10)格式