【发布时间】:2015-04-02 05:51:58
【问题描述】:
这里有学生拥有 RollNumbers 和他们的课程代码的样本数据。
-------------------------
Roll CourseCode
--------------------------
1011 CS201
2213 CS201
3312 CS101
4000 CS201
1011 CS101
5312 ME102
1011 PT101
3312 ME102
结果应该是Coursecode 和他们的考试日期
例如(整理出不同的课程代码)
首先我选择 CS201 并为该课程代码分配一个日期;把它放在一个临时表中,然后我选择 CS101 并在临时表中检查此 Coursecode 的 RollNumbers 是否与临时表中其他 Coursecode 的任何其他 RollNumber 匹配。
---------------------
Code Date
---------------------
CS101 1
CS201 2
ME102 1
PT101 3
我的代码:
-
#temp3包含所有数据(CourseCodes、RollNumbers) -
#mytemp1(输出数据)
并且光标包含不同的课程代码
SET @cursor = CURSOR FOR
SELECT DISTINCT coursecode
FROM #temp3
ORDER BY CourseCode
OPEN @cursor
FETCH NEXT
FROM @cursor INTO @cursorid
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN
SET @j=1
WHILE(@j !=9999999)
BEGIN
IF( SELECT COUNT(*) FROM #temp3 WHERE CourseCode = @cursorid AND RegdNo IN (
SELECT RegdNo FROM #temp3 WHERE CourseCode IN ( SELECT coursecode FROM #myTemp1 WHERE counter1 = @j)
)) = 0
BEGIN
INSERT INTO #myTemp1 VALUES (@cursorid,@j)
SET @j=9999999
END
ELSE
BEGIN
SET @j = @j + 1
END
END
END
FETCH NEXT
FROM @cursor INTO @cursorid
END
CLOSE @cursor
DEALLOCATE @cursor
此代码运行良好,但花费了太多时间(4110222 条记录)
任何帮助将不胜感激
【问题讨论】:
-
我们可以使用 CTE 高效地完成此任务。将为您提供一个示例
标签: sql tsql sql-server-2012