[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

有难度的分类统计问题

作者: IT 专家网,  出处:IT 专家网, 责任编辑: ttdb, 
2006-03-14 11:18
  现在我要统计每个用户答一套题(试题数不定)时本套试题的最高应得分,实际得分,各类的最高应得分和实际得分,用一条语句来实现,结果形如下面:

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语句就可以实现你的要求了。当然了,这个需求在应用程序中处理更合适。

  • 本文关键词:

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

相关文章

邮件订阅