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