我正在尝试创建一个从其他表中提取数据的表。
就我而言,我有5个学生。 每个学生学习3门科目(数学,英语和自然科学) 每个科目都有3个测试。 这意味着在这3门科目中,所有5名学生总共参加9项测试。
我已经创建了学生表,主题表和测试表。 现在,我试图创建Student_Results表,其中需要将所有5个学生的所有9个测试都放在一个表中,该表将显示给定的测试结果。
我一直在努力做到这一点。
请参阅我在下面创建的表。
CREATE TABLE DBO.STUDENTS
(
STUDENT_ID VARCHAR(15) PRIMARY KEY,
STUDENT_FIRSTNAME VARCHAR(255) NOT NULL,
STUDENT_SURNAME VARCHAR(255) NOT NULL,
STUDENT_SCORE_AVERAGE VARCHAR(30)
);
-- Creating the 'Subjects' Table
CREATE TABLE DBO.SUBJECTS
(
SUBJECT_ID VARCHAR(12) PRIMARY KEY,
SUBJECT_NAME VARCHAR(30) NOT NULL,
SUBJECT_AVERAGE VARCHAR(30)
);
-- Creating the 'Tests' Table
CREATE TABLE DBO.TESTS
(
TEST_ID VARCHAR(12) PRIMARY KEY,
TEST_NAME VARCHAR(30) NOT NULL,
TEST_DESCRIPTION VARCHAR(50),
TEST_AVERAGE VARCHAR(3)
);
-- Creating the 'Student_Score' Table
CREATE TABLE DBO.STUDENT_SCORES
(
RESULT_ID VARCHAR (12) PRIMARY KEY,
STUDENT_ID VARCHAR(12) ,
TEST_ID VARCHAR(12),
STUDENT_SCORE VARCHAR(30)
);
create table #TempStudent
(
STUDENT_KEY INT identity (10000000,1),
STUDENT_ID AS CONCAT('STD',STUDENT_KEY),
STUDENT_FIRSTNAME VARCHAR(255),
STUDENT_SURNAME VARCHAR(255)
)
INSERT INTO #TempStudent
VALUES ( 'Daenerys' , 'Targaryen' ),
( 'Jon' , 'Snow' ),
( 'Gregor' , 'Clegane' ),
( 'Arya' , 'Stark' ),
( 'Cersei' , 'Lannister' )
INSERT INTO STUDENTS (STUDENT_ID, STUDENT_FIRSTNAME , STUDENT_SURNAME)
SELECT STUDENT_ID, STUDENT_FIRSTNAME, STUDENT_SURNAME
FROM #TempStudent
create table #TempSubject
(
SUBJECT_KEY INT identity (10000000,1),
SUBJECT_ID AS CONCAT('SUB',SUBJECT_KEY),
SUBJECT_NAME VARCHAR(255)
)
INSERT INTO #TempSubject
VALUES ('Maths'),
('Science'),
('English')
INSERT INTO SUBJECTS (SUBJECT_ID, SUBJECT_NAME )
SELECT SUBJECT_ID, SUBJECT_NAME
FROM #TempSubject
create table #TempTest
(
TEST_KEY INT identity (100,1),
TEST_ID AS CONCAT('TST',TEST_KEY),
TEST_NAME VARCHAR(255),
TEST_DESCRIPTION VARCHAR(255)
)
INSERT INTO #TempTest
VALUES ('Maths 1', 'Geometry'),
('Maths 2', 'Algebra'),
('Maths 3', 'Fractions'),
('Science 1', 'Astronomy'),
('Science 2', 'Biology'),
('Science 3', 'Chemistry'),
('English 1', 'Grammer'),
('English 2', 'Spelling'),
('English 3', 'Literature')
INSERT INTO TESTS(TEST_ID, TEST_NAME , TEST_DESCRIPTION )
SELECT TEST_ID, TEST_NAME, TEST_DESCRIPTION
FROM #TempTest
create table #TempScoreSubmission
(
SCORE_KEY INT identity (1234,1),
RESULT_ID AS CONCAT('RES',SCORE_KEY)
)
答案 0 :(得分:0)
我不知道您想把所有这些临时表放在哪里,为什么不以主键作为标识直接创建实际表并直接插入它们中呢……但是要得到所有的成对表您可以使用交叉联接的学生ID和测试ID。我相信这就是您要寻找的。 p>
SELECT s.student_id,
t.test_id
FROM dbo.students s
CROSS JOIN dbo.tests t;