sql server 语句

sql 中有一个表 存放的 是部门目标的提交时间, 有月份和提交时间,现在需要,对他们提交的时间进行打分,比如:5月份的目标 在5月1号提交之前得10分,2号之前得 8分,3号之后得5分,类似这样的。一个月的话,能有case when 写出来 ,但是想要实现查询多个月份月份目标得分。改如何写 sql image.png

wangjiaojiao 发布于 2019-5-31 09:41 (编辑于 2019-5-31 10:11)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
1
张洪威Lv6高级互助
发布于2019-5-31 10:05(编辑于 2019-5-31 10:17)

每个月的得分规则一样吗?比如都是按距离月初的天数来算,如果规则一样,直接判断提交时间与提交时间所在月的一号中间间隔,最后对间隔天数case when  得出分数。


如果规则不一样,那只能辛苦人力穷举了,把每月的数据都case when 出来, 最后union all 求和。



SELECT TOP 1000 

dDate,convert(varchar(10),dateadd(dd,-datepart(dd,dDate)+1,dDate) ,23) as firstday , 

DATEDIFF(d,convert(varchar(10),dateadd(dd,-datepart(dd,dDate)+1,dDate) ,23),dDate) as '间隔'

  FROM  表名   


ddate 换成你的提交时间就行了。



image.png

  • wangjiaojiao wangjiaojiao(提问者) 规则是一样的,怎么判断提交时间与提交时间所在月的一号中间间隔呢
    2019-05-31 10:07 
  • 张洪威 张洪威 回复 wangjiaojiao(提问者) 不能发图片,我给你回复在下面了。
    2019-05-31 10:16 
  • wangjiaojiao wangjiaojiao(提问者) 回复 张洪威 谢谢哈,我看到了
    2019-05-31 10:20 
  • wangjiaojiao wangjiaojiao(提问者) sql server 可以使用 case when 嵌套吗?比如说 case when 月份=3 then (case when 间隔=1 then 10 分 end)end
    2019-05-31 10:33 
  • 张洪威 张洪威 回复 wangjiaojiao(提问者) 你想嵌套是因为复选多个月的得分做不了吗?你用month 函数提取一个月份列出来就可以,只针对间隔用 case when ,可以得出每个人每个月的目标得分,然后求和 group by month 跟用户人名就好了。
    2019-05-31 10:37 
最佳回答
1
doudekaixinLv6中级互助
发布于2019-5-31 09:50(编辑于 2019-5-31 10:34)

这个不是一样么。。。

你 case when 里面不要判断具体的年月日,你只需要判断日就可以了



我这边是Mysql

你按照这个改。

image.png


  • wangjiaojiao wangjiaojiao(提问者) 5月的目标,他是 6月 1号补充的,这样不就就是错误了吗
    2019-05-31 09:53 
  • doudekaixin doudekaixin 回复 wangjiaojiao(提问者) 你贴个图我看下你数据表里面的结构是怎么样的?
    2019-05-31 10:01 
  • wangjiaojiao wangjiaojiao(提问者) 回复 doudekaixin 我在问题上贴上了
    2019-05-31 10:03 
  • wangjiaojiao wangjiaojiao(提问者) 回复 doudekaixin 因为我只展示的3月份的
    2019-05-31 10:10 
  • doudekaixin doudekaixin 回复 wangjiaojiao(提问者) 你这表结构设计的不是有问题么?你说的可以延迟填写,然后月份只有一个3,你怎么能保证20190328不是补填的2018年3月的数据?或者不是预填的2020年3月的数据?
    2019-05-31 10:10 
  • 3关注人数
  • 646浏览人数
  • 最后回答于:2019-5-31 10:34
    请选择关闭问题的原因
    确定 取消
    返回顶部