表格为例:
ID,课程代码,开始日期,结束日期,讲师,位置,年份,学期
1,ACC 2112 1EB,1/1/2020,2/1/2020,鲍勃,Main,2020,FA
2,ACC 2112 1EB,1/1/2020,2/1/2020,Bob,Main,2020,SP
3,ACC 2112 1EB,1/1/2019,2/1/2019,Joe,Main,2019,SP
4,ART 2201 1EB,1/1/2020,2/1/2020,Joe,Main,2020,SP
我需要编写一个查询,将上面表中ID为1和2的课程转换为一门课程。这是基于课程代码以及开始和结束日期相同的组合来完成的。该行中的其他数据将有所不同。
我意识到我可以根据课程代码对它们进行分组,并指定开始/结束日期,但是我仍然需要知道这些课程的ID。
所以从本质上讲,我试图创建这些课程代码的映射。结果看起来像。
ID,对应的课程代码
1,ACC 2112 1EB_2020
2,ACC 2112 1EB_2020
3,ACC 2112 1EB_2019_SP
4,ART 2201 1EB_2020_SP
理想情况下,这将是一个视图,但如有必要,我可以使用存储过程。此外,结果中不需要存在第3行和第4行,但如果需要可以是第3行和第4行。
嗨,据我所知,这就是您要寻找的东西:
DECLARE @MyTable TABLE (ID int, CourseCode nvarchar(50), BeginDate Date, EndDate Date,
Instructor nvarchar(50), Location nvarchar(50), Year int , Term nvarchar(50))
INSERT INTO @MyTable
VALUES(1,'ACC 2112 1EB', '1/1/2020', '2/1/2020', 'Bob', 'Main', 2020, 'FA')
INSERT INTO @MyTable
VALUES(2,'ACC 2112 1EB', '1/1/2020', '2/1/2020', 'Bob', 'Main', 2020, 'SP')
INSERT INTO @MyTable
VALUES(3,'ACC 2112 1EB', '1/1/2019', '2/1/2019', 'Joe', 'Main', 2019, 'SP')
INSERT INTO @MyTable
VALUES(4,'ART 2201 1EB', '1/1/2020', '2/1/2020', 'Joe', 'Main', 2020, 'SP')
--The solution
SELECT ID, CourseCode
FROM(
SELECT ID, CourseCode + '_' + CONVERT(nvarchar(4), Year) as CourseCode,
COUNT(*) OVER (PARTITION BY CourseCode, BeginDate, EndDate) as Converted
FROM @MyTable) as temp
WHERE Converted > 1
COUNT(*)OVER(PARTITION BY CourseCode,BeginDate,EndDate)将对您合并的课程进行计数,这些课程将根据PARTITION BY部分中的内容进行分组。之后,您只需选择COUNT大于1的所有课程,这意味着这些课程将被合并。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句