Sql server 打破规范化规则,从多个表创建表/视图

Sql server 打破规范化规则,从多个表创建表/视图,sql-server,Sql Server,我有一个问题,不知道这是否是正确的论坛张贴它 我有两个表,StudentTable和CourseTable,每个学生都选修了一门以上的课程 示例:学生1选修两门课程:(C1,C2) 学生2修3门课程(C1、C2、C3) 我需要创建一个表/视图,其中包含StudentTable中的学生信息,以及CourseTable中的所有课程和每门课程的分数 示例: Row1= Student1_Id, C1_code, C1_name, C1_Score, C2_code, C2_name, C2_Score

我有一个问题,不知道这是否是正确的论坛张贴它

我有两个表,
StudentTable
CourseTable
,每个学生都选修了一门以上的课程

示例:
学生1
选修两门课程:
(C1,C2)

学生2
修3门课程
(C1、C2、C3)

我需要创建一个表/视图,其中包含
StudentTable
中的学生信息,以及
CourseTable
中的所有课程和每门课程的分数

示例:

Row1= Student1_Id, C1_code, C1_name, C1_Score, C2_code, C2_name, C2_Score  
Row2=
Student2_Id, C1_code, C1_name, C1_Score, C2_code, C2_name, C2_Score, C3_code, C3_name, C3_Score
由于Student1只有两门课程,我应该在“课程3字段”中输入NULL

我的挣扎在插入语句中。我尝试了以下操作,但显示出错误

Insert Into Newtable 
( St_ID, C1_code,c1_name, C1_Score ,C2_code ,C2_name,C2_score,C3_code ,C3_name,C3_score)

Select
(Select St_ID from StudentTable)
,
(Select C_code,c_name,c_Score 
from Coursetable,SudentTable
where course.Stid =Studet.stid)
,
(Select C_code,c_name,c_Score 
from course ,student
where course.Stid =Studet.stid ),
(Select C_code,c_name,c_Score 
from course ,student
where course.Stid =Studet.stid );
我完全知道,新的表/视图将打破规范化规则,但我需要它用于特定目的

我还尝试了PIVOT的功能,但没有成功

仅供参考,我不是SQL语法专家。我只知道基本知识

如果有任何有用的建议可以尝试,我将不胜感激

我添加了我的数据库结构,这样你可以有更好的想法

第一个表是成员表,代表学生信息

成员sk(主键),全职或兼职,性别,入职年龄,入职年龄,残疾,种族

扩大参与程度、国籍

第二个表是模块表,其中包括学生所修课程的分数

此表中的字段为

模块\结果\ k(主键)、成员\ sk(连接到成员表的外键)、成员\阶段\ sk、模块\ k(连接到模块表的外键)、模块\确认\等级\ src、学分\或\结果

第三个表是AllModuleInfo,其中包括每个课程的一般信息

模块k(主键)、模块名称、模块代码、模块学分、模块阶段

我将创建的新表具有以下字段

成员sk(主键),全职或兼职,性别,入职年龄,入职年龄,残疾,种族

扩大参与程度,国籍“将从成员表中检索”

还将包括

模块1名称、模块1代码、模块1信用、模块1阶段、成员1阶段、模块1确认等级、信用或结果

模块2名称、模块2代码、模块2学分、模块2阶段、成员2阶段、模块2确认等级、学分2或结果

-

-

-

我将重复此字段14次,这相当于任何学生所修的最大课程数。


////我希望现在我的问题变得更清楚了

如果一个学生有4门课怎么办?还是5?或17?是的,这是正确的,学生可能有不同数量的课程。以下是我的结构,这样您可以有一个清晰的想法。这是正确的,学生可能有不同数量的课程,因此我认为新表应该有任何学生可以修读的最大数量的课程字段,默认情况下,它将包含空值。我附加了我的结构,这样您就可以有一个清晰的想法。为什么您需要/想要这样的表/视图?这将是非常难以维护和使用的。这可能是重复的。这里的解决方案应该适合您。