我正在使用课程目录表,其中提供了课程提供时的目录代码和课程代码。我需要做的是确定何时不再提供课程并将其标记为存档课程。比较同一表中的数据 - SQL
CREATE TABLE [dbo].[COURSECATALOG](
[catalog_code] [char](6) NOT NULL,
[course_code] [char](7) NOT NULL,
[title] [char](40) NOT NULL,
[credits] [decimal](7, 4) NULL,
)
insert into coursecatalog
values
('200810', 'BIOL101', 'Biology', '3'),
('200810', 'CHEM201', 'Advanced Chemistry', '3'),
('200810', 'ACCT101', 'Beginning Accounting', '3'),
('201012', 'ACCT101', 'Beginning Accounting', '3'),
('201214', 'ACCT101', 'Beginning Accounting', '3'),
('201214', 'ENGL101', 'English Composition', '3'),
('201416', 'PSYC101', 'Psychology', '3'),
('201618', 'PSYC101', 'Psychology', '3'),
('201618', 'BIOL101', 'Biology', '3'),
('201618', 'CHEM201', 'Advanced Chemistry', '3'),
('201618', 'ENGL101', 'English Composition', '3'),
('201618', 'PSYC101', 'Psychology', '3')
在这种情况下,我需要返回ACCT101 - 开始的会计,因为这是不提供了,应该被视为归档过程。
我迄今为止代码:
SELECT
catalog_code, course_code
FROM COURSECATALOG t1
WHERE NOT EXISTS (SELECT 1
FROM COURSECATALOG t2
WHERE t2.catalog_code <> t1.catalog_code
AND t2.course_code = t1.course_code)
order by
course_code, catalog_code
但是,只提供过一次(在一个目录下)这只是回报的课程。我需要弄清楚我可以如何获得可能在多个目录中提供的课程,但不再提供。
任何可以提供的援助表示赞赏!
谢谢!
只是好奇。您如何知道ACCT101来自旧目录,而不是当前目录中的新类?看来也许“当前”目录是catalog_code的最大值?更规范的结构将使这更容易。添加一个目录表会使这个模糊不清。我真的希望这些教授会用更好的例子来表达他们给学生的东西。 –
我正在基于目录代码。例如,201618是一个涵盖2016 - 2018年的目录。我不确定这个目录是否真的很重要,因为我需要任何不再提供的课程? – RAR
没错。但是我问你如何知道目录是什么。并指出这里的数据含糊不清。如果你不需要知道什么是当前目录(或最近的),你无法知道什么课程是新的,什么课程已经退役。 –