当前位置: 代码迷 >> Sql Server >> sql 绩效分数按比例强制分布,该如何处理
  详细解决方案

sql 绩效分数按比例强制分布,该如何处理

热度:49   发布时间:2016-04-24 09:12:31.0
sql 绩效分数按比例强制分布
需求如下。表中有两个字段,姓名和分数,具体值:
姓名1,100
姓名2,99
姓名3,98
姓名4,97
姓名5,97
姓名6,97
姓名7,97
姓名8,96
比例为A:20%,B:60%,C:20%
即这8个人中按照分数由高到低,有20%为A,有60%为B,有20%为C。(8*0.2=1.6四舍五入,为2个人)
这个语句应如何写,请赐教。

------解决思路----------------------
SELECT 姓名
,CASE WHEN RN<=ROUND(0.2*C,0)THEN'A'
WHEN RN<=ROUND(0.8*C,0)THEN'B'
ELSE'C'
END
FROM(
SELECT *,ROW_NUMBER()OVER(ORDER BY 分数 DESC,NEWID())RN
,COUNT(*)OVER()C
FROM TB
)T
  相关解决方案