重新开一个帖子,探讨一个比较有难度的分类统计问题,分不多,也要奖励!

batistutafans 2006-03-10 04:26:58
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

...全文
132 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
batistutafans 2006-03-13
不明白可可的意思啊,我实在是太菜了,你这个函数怎么用?我的这样的结果:
应得总分:
17
实际得分
13

项目管理应得分:2
实际得分:2

商务礼仪应得分:2
实际得分:0

心理素质应得分:1
实际得分:0

身体测评应得分:8
实际得分:8

情商测评应得分:4
实际得分:3
通过调用你这个函数就可以实现吗?

TO 子陌红尘:
你有什么高见?
回复
xeqtr1982 2006-03-13
学习可可:)
回复
子陌红尘 2006-03-13
这个需求在应用程序中处理更合适。
回复
lsqkeke 2006-03-13
f_calc()这个函数就是根据数字计算的字符串来得出其值!
然后楼主自己写SQL语句就可以实现你的要求了
回复
lsqkeke 2006-03-13
计算给定表达式的值:
/*--调用示例

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(字段名,',','+'))

回复
batistutafans 2006-03-11
请帮忙啊,就是如何在取记录是把这个逗号给处理好的问题呀!
回复
batistutafans 2006-03-10
应得总分:
17
实际得分
13

项目管理应得分:2
实际得分:2

商务礼仪应得分:2
实际得分:0

心理素质应得分:1
实际得分:0

身体测评应得分:8
实际得分:8

情商测评应得分:4
实际得分:3
回复
子陌红尘 2006-03-10
楼主说明一下最终需要输出的结果集是什么样子。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-10 04:26
社区公告
暂无公告