Sql server 分组方式,同时保持对其他列的访问
以表格为例: ID、课程代码、开始日期、结束日期、讲师、地点、年份、学期 1,ACC 2112 1EB,2020年1月1日,2020年2月1日,缅因州鲍勃市,2020年,佛罗里达州 2,ACC 2112 1EB,2020年1月1日,2020年2月1日,缅因州鲍勃市,2020年,SP 2019年1月1日,2019年2月1日,缅因州乔市,2019年,附件2112 1EB 4,艺术2201 1EB,2020年1月1日,2020年2月1日,缅因州乔,2020年,SP 我需要编写一个查询,将上表中ID为1和2的课程转换为一门课程。这是基于课程代码的组合以及相同的开始和结束日期来完成的。行中的其他数据将不同 我意识到我可以根据课程代码和开始/结束日期对这些课程进行分组,但是我仍然需要知道这些课程的ID是什么 所以本质上,我试图创建这些课程代码的映射。结果看起来像 ID,映射的课程代码 1,ACC 2112 1EB_2020 2,ACC 2112 1EB_2020 3,ACC 2112 1EB_2019_SP 第2201条第4款B_2020_SPSql server 分组方式,同时保持对其他列的访问,sql-server,Sql Server,以表格为例: ID、课程代码、开始日期、结束日期、讲师、地点、年份、学期 1,ACC 2112 1EB,2020年1月1日,2020年2月1日,缅因州鲍勃市,2020年,佛罗里达州 2,ACC 2112 1EB,2020年1月1日,2020年2月1日,缅因州鲍勃市,2020年,SP 2019年1月1日,2019年2月1日,缅因州乔市,2019年,附件2112 1EB 4,艺术2201 1EB,2020年1月1日,2020年2月1日,缅因州乔,2020年,SP 我需要编写一个查询,将上表中ID为1
理想情况下,这将是一个视图,但如有必要,我可以使用存储过程。此外,第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
按CourseCode、BeginDate、EndDate划分的COUNT*将按分区中按节编写的内容对要合并在一起的课程进行计数。之后,您只需选择计数大于1的所有课程,这意味着这些课程已合并