Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 分组方式,同时保持对其他列的访问_Sql Server - Fatal编程技术网

Sql server 分组方式,同时保持对其他列的访问

Sql 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

以表格为例:

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_SP


理想情况下,这将是一个视图,但如有必要,我可以使用存储过程。此外,第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的所有课程,这意味着这些课程已合并