楼主,是要达到这种效果么?(以2013级为例)
如果是的话,各年级代码如下:
2013级:
UPDATE Pyfa SET 适用年级='2013' ;
WHERE 专业名称+方案版本+课程名称 IN ;
(SELECT MAX(专业名称+方案版本+课程名称) FROM Pyfa ;
GROUP BY 专业名称,课程名称 ;
WHERE ALLTRIM(开课学期)=[1] AND ALLTRIM(方案版本)<=[2013])
2012级:
UPDATE Pyfa SET 适用年级='2012' ;
WHERE 专业名称+方案版本+课程名称 IN ;
(SELECT MAX(专业名称+方案版本+课程名称) FROM Pyfa ;
GROUP BY 专业名称,课程名称 ;
WHERE ALLTRIM(开课学期)=[3] AND ALLTRIM(方案版本)<=[2012])
2011级:
UPDATE Pyfa SET 适用年级='2011' ;
WHERE 专业名称+方案版本+课程名称 IN ;
(SELECT MAX(专业名称+方案版本+课程名称) FROM Pyfa ;
GROUP BY 专业名称,课程名称 ;
WHERE ALLTRIM(开课学期)=[5] AND ALLTRIM(方案版本)<=[2011])
2010级:
UPDATE Pyfa SET 适用年级='2010' ;
WHERE 专业名称+方案版本+课程名称 IN ;
(SELECT MAX(专业名称+方案版本+课程名称) FROM Pyfa ;
GROUP BY 专业名称,课程名称 ;
WHERE ALLTRIM(开课学期)=[7] AND ALLTRIM(方案版本)<=[2010])
2009级:
UPDATE Pyfa SET 适用年级='2009' ;
WHERE 专业名称+方案版本+课程名称 IN ;
(SELECT MAX(专业名称+方案版本+课程名称) FROM Pyfa ;
GROUP BY 专业名称,课程名称 ;
WHERE ALLTRIM(开课学期)=[9] AND ALLTRIM(方案版本)<=[2009]) &&不过你上传的表中貌似没有第9学期的课
给楼主一个建议:开课学期最多只要2位,没必要弄得那么长。另外,有些课程名称一样的,但课号不同,不知道是否因为学分数不同等原因导致课号的变化,还是虽然名称一样,但根本是两门课?我给出的解决方案是当作第一种情况的,因为这种情况相对多些。如果是第二种情况,把代码中所有的“课程名称”改成“课程代码”。如果一个表中的课程兼有两种情况,那就无法仅从现有字段判断了,需要另外加一个标志字段。从你理论课时、实验课时两字段来看,我判断是第一种情况。
[
本帖最后由 taifu945 于 2013-4-19 09:27 编辑 ]