求一个SQL语句

qinzhuhua 2012-04-18 07:59:03
表Pay有以下字段:
proid(项目id),payname(姓名),paytype(补偿类型),支付状态(paystate),补偿金额(paymoney),paydate(日期)
现在要求按日期的范围汇总出以下结果:
项目名称 已开折金额(paystate<>'0') 未开折金额(paystate='0') 房屋补偿(paytype='房屋补偿') 奖金 增补

请问怎样才能尽可能简单的写出这个SQL语句?
...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinzhuhua 2012-04-18
  • 打赏
  • 举报
回复
对了,那个日期,为了方便,数据库里我设计的类型是char(10),
在这里用BETWEEN AND不用转换为时间类型吧?
里面的所有日期的格式都是固定的2011-01-12这种char(10)格式
qinzhuhua 2012-04-18
  • 打赏
  • 举报
回复
我写出来了,就涉及到两张表(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
Mirror然 2012-04-18
  • 打赏
  • 举报
回复
涉及的表还不止一张吧
贴数据和想要的结果

hglai 2012-04-18
  • 打赏
  • 举报
回复
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 日期范围条件

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧