MsSql 自定义分数段,按分数段统计考试人次

--分数段分布 
DECLARE @levels VARCHAR(100) = '10,20,30,40,50,60,70,80,90,100'; --自定义分数段
DECLARE @paperId VARCHAR(100)='0000000000001019'--试卷编号
WITH tbTemp AS (--处理分数段
         SELECT L.level
         FROM   (
                    SELECT [value] = CONVERT(XML, '<v>' + REPLACE(@levels, ',', '</v><v>') + '</v>')
                ) T
                OUTER APPLY (
             SELECT LEVEL = CONVERT(INT, N.v.value('.', 'varchar(100)'))
             FROM   T.[value].nodes('/v') N(v)
         ) L
     ), 
     tbLevel AS (--生成分数段区间
         SELECT (
                    SELECT ISNULL(MAX(t.level), 0)
                    FROM   tbTemp AS t
                    WHERE  t.LEVEL < tt.level
                )         AS level0,
                tt.level  AS level1
         FROM   tbTemp    AS tt
     ),
     tbScore AS(--处理成绩为null或0分,为了分配到0-?区间
         SELECT (CASE WHEN tp.GetScore > 0 THEN tp.GetScore ELSE 0.1 END) AS 
                pScore
         FROM   成绩表 AS tp
         WHERE  tp.PaperID = @paperId
     )
--统计区间人次
SELECT tl.level0,
       tl.level1,
       (
           SELECT COUNT(0)
           FROM   tbScore AS ts
           WHERE  ts.pScore > level0
                  AND ts.pScore <= level1
       )        AS ExamCount
FROM   tbLevel  AS tl;

levels = '10,20,30,40,50,60,70,80,90,100'; 

levels = '40,60,80,100'; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieZhengChina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值