现在位置:中国IDC吧>数据库>SQL server数据库> 文章内容

有难度的分类统计问题

收藏发布 来源:IT 专家网 作者:中国IDC吧 更新日期:2008-09-30 点击:
  现在我要统计每个用户答一套题(试题数不定)时本套试题的最高应得分,实际得分,各类的最高应得分和实际得分,用一条语句来实现,结果形如下面:

 

t_TQuiz_Detail表(试题及答案信息)
ID int
Qtype int 试题类型,对应t_Type中的id
Question ntext 问题描述
AnswerCount int 答案项数
AnswerList nvarchar 答案列表
ScoreList nvarchar 各答案对应分数列表
QS int 试题期数
内容如下:
id Qtype Question AnswerCount AnswerList Scorelist QS
1 14 哪个国家的人会庆祝斋月 5 沙特阿拉伯CCCC印度CCCC新加坡CCCC韩国CCCC上述四国 0,1,0,0,0,0 1
2 14 与韩国生意伙伴见面,称呼5 金先生CCCC卢先生CCCC吉先生CCCC兄弟CCCC以上称呼都可以 0,0,1,0,0,0 1
18 2 当你从事一个项目时 2 讲求实际的CCCC富于想象的 0,1 1
27 2 你最欣赏的人是 2 有创造的精神的CCCC细心的 1,0 1
43 19 我经常征求意见和建议 2 是CCCC否 1,0 1
69 21 你能发觉醒来是早上吗 4 一点不容易CCCC不太灵活CCCC比较灵活CCCC非常灵活 0,1,2,3,4 1
71 21 你觉得疲倦吗 4 非常疲倦CCCC比较疲倦CCCC比较振作CCCC非常振作 0,1,2,3,4 1
86 22 大多数人本质上是好的 4 极不赞同CCCC基本不赞同CCCC两可CCCC基本赞同 0,1,2,3,4 1


t_TRecord表(个人答题记录)
ID int
username nvarchar 答题人
QID int 试题号,对应t_TQuiz_Detail中的QS
myAnswer nvarchar 所选答案列表
myScore nvarchar 对应得分列表
部分内容如下:
id username QID MyAnswer myScore
15 zhangsan 1 1,2,2,1,2,4,4,3 0,0,1,1,0,4,4,3

t_Type表(试题类型)
ID int
Subject nvarchar 试题类型
内容如下:
ID Subject
2 项目管理
14 商务礼仪
19 心理素质
21 身体测评
22 情商测评

 

  现在我要统计每个用户答一套题(试题数不定)时本套试题的最高应得分,实际得分,各类的最高应得分和实际得分,用一条语句来实现,结果形如下面:

  应得总分:

  1 1 1 1 1 4 4 4=17

  实际得分

  0 0 1 1 0 4 4 3=13

  项目管理应得分:1 1=2

  实际得分:1 1=2

  商务礼仪应得分:1 1=2

  实际得分:0 0=0

  心理素质应得分:1

  实际得分:0

  身体测评应得分:4 4=8

  实际得分:4 4=8

  情商测评应得分:4

  实际得分:3

答:

 

计算给定表达式的值:
/*--调用示例

select dbo.f_calc('123 456')
--*/
create function f_calc(
@str varchar(1000)--要计算的表达式
)returns sql_variant
as
begin
declare @re sql_variant

declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int

exec @err=sp_oacreate 'MSScriptControl.ScriptControl',@obj out
if @err<>0 goto lb_err

exec @err=sp_oasetproperty @obj,'Language','vbscript'
if @err<>0 goto lb_err

exec @err=sp_oamethod @obj,'Eval',@re out,@str
if @err=0 return(@re)

lb_err:
exec sp_oageterrorinfo NULL, @src out, @desc out
declare @errb varbinary(4),@s varchar(20)
set @errb=cast(@err as varbinary(4))
exec master..xp_varbintohexstr @errb,@s out
return('错误号: ' @s char(13) '错误源: ' @src char(13) '错误描述: ' @desc)
end

 

  由于你的字符串是用',' 逗号隔开的 传值和调用时用:

  select dbo.f_calc(replace(字段名,',',' '))

  f_calc()这个函数就是根据数字计算的字符串来得出其值!

  然后楼主自己写SQL语句就可以实现你的要求了。当然了,这个需求在应用程序中处理更合适。



收藏此页到网摘/书签:
所有评论

评论列表

用户名: 新注册) 密码: 匿名评论