Javascript SQL Server 2012将表行值与结果表中的列名关联

Javascript SQL Server 2012将表行值与结果表中的列名关联,javascript,asp-classic,sql-server-2012,Javascript,Asp Classic,Sql Server 2012,第一次在这里发布…请原谅格式问题。经过几天的努力,我试图找到一个类似的情况,并据此得出解决我的问题的办法,我仍然发现自己置身于一个魔方之中。我正试图创建一份“报告”,显示学生在考试中的表现和他们的人口统计数据。以下是场景: 我有一个包含以下列的考试源表: 表名:FOT2012PRE ItemID int(主键) ItemNum nchar(10)(结果表中对应的列名) ItemStem nvarchar(1000)(这是问题stem。) IC1 nvarchar(1000)(这是第一个答案选择。

第一次在这里发布…请原谅格式问题。经过几天的努力,我试图找到一个类似的情况,并据此得出解决我的问题的办法,我仍然发现自己置身于一个魔方之中。我正试图创建一份“报告”,显示学生在考试中的表现和他们的人口统计数据。以下是场景:

我有一个包含以下列的考试源表:

表名:FOT2012PRE

ItemID int(主键)
ItemNum nchar(10)(结果表中对应的列名)
ItemStem nvarchar(1000)(这是问题stem。)
IC1 nvarchar(1000)(这是第一个答案选择。)
IC2 nvarchar(1000)(这是第二个答案选择。)
IC3 nvarchar(1000)(这是第三个答案选择。)
IC4 nvarchar(1000)(这是第四个答案选择。)
PriAns nvarchar(10)(这是正确的答案选择-不适用 人口统计项目。)

还有其他列用于标识图形、视频、课程、单元、演示标志

以下是检查源表中的一些数据:

ItemID ItemNum ItemStem IC1 IC2 IC3 IC4优先级
1 Item1什么 你目前的成绩是多少?九年级十年级十一年级十二年级 等级为空
2项2你的性别是什么? 男性女性无效

当学生回答每个问题时,他们的选择会记录在该考试的成绩表中。此结果表包含以下列:

表名:FOT2012PRERESULTS

ResultsID int(主键)
StudentID nvarchar(255)(每个参加考试的学生的唯一ID)
LastItem nvarchar(255)(随着每个答案的处理而更新-用于考试 重新输入)
第1项nvarchar(255)(为第1项记录的答案: “C”如果正确;选择如果不正确)
项目2
nvarchar(255)(第2项记录的答案:与所有其他项目相同 考试中的问题)

以下是结果表中的一些示例数据:

ResultsID StudentID LastItem1 Item2 Item3
743 MD911059935 67 IC2 IC2 C
744 IC2 IC2 C
746 MD911059949 67 IC2 IC2 IC4
934 MD3590986869 46 IC2 IC1 IC3

最终,我希望我的报告看起来像这样:

ExamId (exam source table name, eg 'FOT2012PRE') 
ItemNum (from exam source table, eg 'Item1') 
StudentId (eg 'MD911059935') 
Response (eg 'IC1', or NULL)
项目:你目前的成绩是多少?

9年级(IC1响应数量)
10年级(数量 第11级(IC3响应的数量)
12级(IC4响应数量)
无响应(数量 (空响应的数量)

这些结果将以表格的形式出现,并且还会比较本地、地区、州和国家的结果,但我可以执行相应的嵌套查询来处理这些结果。对于这个解决方案,我愿意并相信它最好作为存储过程实现,因为大约有40个考试分布在许多州和数千名学生。我可以根据需要传递表名和其他值。对报告的访问是个性化的,基于针对特定班级进行的考试

我感谢任何帮助和建议。我必须恭敬地请求您提供有关任何连接或枢轴的详细信息。我是一个恐龙和ASP JavaScript程序。到目前为止,我在这条路上的尝试只是把我放进了这个立方体…我需要一些光线来找到我的出路。如果我遗漏了什么,请告诉我

谢谢你

更新:

以下是我创建的SP的一部分,用于将数据规范化为一个表:

Create Table #rawtemp 
( 
Choice nchar(5),
ChoiceCount float
)

Create Table #temp 
( 
Item nchar(5),
Choice nchar(5),
ChoiceCount float
)
-- Query the results table and tally by response

而(@i像这样构建临时表:

ExamId (exam source table name, eg 'FOT2012PRE') 
ItemNum (from exam source table, eg 'Item1') 
StudentId (eg 'MD911059935') 
Response (eg 'IC1', or NULL)
  • 如果有多所学校使用完全相同的“examId”,请添加列以区分这些学校
这将为每个唯一的考试/问题编号/回答的学生和他的回答(如果有)提供一行

要填充此表,请循环检查源表;每行的ItemNum字段包含结果表中的一个列名。从结果表中检索studentId+相应结果列(例如Item2,包含“IC4”)的值,并将其存储在临时表中

在当前使用的生成查询中,是否可以:

Set @xsql = 'Select ''' + @examcol + ''' as Item, '+@examcol+' AS Choice, Count(*) AS ChoiceCount FROM dbo.'+@pretest+' WHERE '+@examcol+' <> '''' AND StudentID LIKE '''+@st+''' Group By '+@examcol
Set@xsql='选择'+@examcol+''作为项目,'+@examcol+'作为选项,将(*)作为从dbo计算的ChoiceCount。'+@pretest+'其中'+@examcol+''''和学生ID'+@st+''按'+@examcol分组

结果表很难使用。给定记录的“Item3”字段的值可能与另一个记录的值完全不同,因为它可能是一个完全不同的考试。我认为您需要在结果表中保留“resultsId”,其中描述了所参加的考试,“studentId”拿了它的学生,以及他们的最后一个项目,并将剩余的数据拆分为(例如)“答案”包含resultsId、questionId和answerValue的表。这将消除您试图创建的报表的交叉表性质,并让您使用更高效的联接来构建它。这是我最初的架构意图,但是,客户端要求最终要求每个考试都有自己的结果表,这正是因为每个考试都有自己的结果表项目因考试而异。每个项目都与特定的单元和基准相关联,参加项目3的每个学生都会得到相同的问题。更新后,将创建一个新的考试版本(来源和结果)…在这些考试中,经常比较苹果和苹果是很重要的。我很感谢你的建议,但我必须根据我的建议找到一个解决方案…呃…听到这个消息我很难过,我觉得这太疯狂了。它消除了关系数据库的易用性和性能,给你留下了无数的excel电子表格。如果可能的话,与ge抗争但这并没有改变,并提供了另一个重新设计
Set @xsql = 'Select ''' + @examcol + ''' as Item, '+@examcol+' AS Choice, Count(*) AS ChoiceCount FROM dbo.'+@pretest+' WHERE '+@examcol+' <> '''' AND StudentID LIKE '''+@st+''' Group By '+@examcol