sqlquery使用columnname中的id将数据从一个表插入到另一个表

sqlquery使用columnname中的id将数据从一个表插入到另一个表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个旧数据库,其中包含一些复杂的数据连接。如下所示 科目 身份证名称 ---------------- 1数学 2科学 3 English假设这是数据的一次性转换,并且您已经填充了新的结果表,那么以下简单的方法应该可以工作: INSERT INTO ResultDetails(ResultId, SubjectId, Marks, MaxMarks) SELECT R.StudentId, 1 AS SubjectId, OldR.Math AS Marks,

我有一个旧数据库,其中包含一些复杂的数据连接。如下所示

科目

身份证名称 ---------------- 1数学 2科学
3 English假设这是数据的一次性转换,并且您已经填充了新的结果表,那么以下简单的方法应该可以工作:

INSERT INTO ResultDetails(ResultId, SubjectId, Marks, MaxMarks)
SELECT 
    R.StudentId, 
    1 AS SubjectId, 
    OldR.Math AS Marks, 
    OldR.MathMax AS MaxMarks
FROM Results R
INNER JOIN OldResults OldR ON R.StudentId = OldR.StudentId

INSERT INTO ResultDetails(ResultId, SubjectId, Marks, MaxMarks)
SELECT 
    R.StudentId, 
    2 AS SubjectId, 
    OldR.Science AS Marks, 
    OldR.ScienceMax AS MaxMarks
FROM Results R
INNER JOIN OldResults OldR ON R.StudentId = OldR.StudentId

INSERT INTO ResultDetails(ResultId, SubjectId, Marks, MaxMarks)
SELECT 
    R.StudentId, 
    3 AS SubjectId, 
    OldR.English AS Marks, 
    OldR.EnglishMax AS MaxMarks
FROM Results R
INNER JOIN OldResults OldR ON R.StudentId = OldR.StudentId

这不是一个非常优雅的解决方案,但不需要一次性转换。

原始表格中是否只有3个主题?或者还有更多的,这只是一个样本?原始表格中至少有10个主题。这就是这些表格的一个例子。原始表格包含更多列,如考试详情、成绩等。如果他有40门科目怎么办?感谢您的快速回复。但是根据这个,我必须为每个主题创建一个查询。如果你的课程数量有限,这是一个很好的解决方案。我尝试了一些改变,比如加入其他表格。之后,数据将成功插入新表中。现在必须检查数据是否正确插入。将标记为回答尽快完成。好的,酷。我假设您发布的模式涵盖了所有主题,因为表中每个主题都有一个明确的列。数据看起来不错。发布的数据只是一个例子。原始表格包含更多的数据,如考试详情、成绩等。因此,如果有人在其他表格的受试者数量有限的情况下遇到同样的问题,您可以使用此表格。谢谢艾伦!!