2017-12-18 343 views
3

我目前正在使用SQL Server 2008.我有多个记录让学生在同一课程中注册,但一些记录具有相同的开始日期和空值或结束日期的实际日期。如果开始日期对于同一个学生是相同的,我试图获得带有空值的记录。系统中的数据还包含有开始日期和结束日期的记录,但我打算保留这些记录。我已经尝试了下面的查询,但它没有给我回任何结果。有没有办法做到这一点?任何帮助,将不胜感激。SQL:如果其他记录具有相同的开始日期,则选择结束日期为空值的数据

SELECT DISTINCT 
    t1.* 
FROM Enrolled_students t1 
JOIN Enrolled_students t2 
    ON t1.studentid = t2.studentid 
    AND t1.program_enrolled = t2.program_enrolled 
    AND t1.startdate = t2.stardate 
    AND t1.enddate <> t2.enddate 

DATA

StudentID program StartDate   enddate_Date 
267342  Science 2016-09-19 00:00:00.000 NULL 
267342  science 2016-09-19 00:00:00.000 2017-01-17 00:00:00.000 
435359  math  2017-05-18 00:00:00.000 2017-08-29 00:00:00.000 
290332  Lab  2014-02-11 00:00:00.000 NULL 

成绩

StudentID program startDate   end_Date 
267342  Science 2016-09-19 00:00:00.000 NULL 
435359  math  2017-05-18 00:00:00.000 2017-08-29 00:00:00.000 
290332  Lab  2014-02-11 00:00:00.000 NULL 
+0

套用;你想删除带有'NULL'结束日期的任何记录,但是只有当具有实际的*('NOT NULL')*结束日期的匹配记录*(相同的学生,程序和startdate)*时才会删除。 – MatBailie

回答

4

运行下面的SQL。这将返回与具有相同的学生+课程+在同一个表的另一个条目结束日期的学生档案开始日期结合NULL的结束日期

SELECT 
* 
FROM Enrolled_students 
    WHERE enddate_Date IS NOT NULL 
     AND EXISTS 
     (
      SELECT 
       1 
       FROM Enrolled_students ES 
        WHERE ES.StudentID = Enrolled_students.StudentID 
         AND ES.Program = Enrolled_students.Program 
         AND ES.StartDate = Enrolled_students.StartDate 
         AND ES.enddate_Date IS NULL 
     ) 
+0

我认为这是回到前面...... OP说'我试图得到与空值的记录' – MatBailie

+0

有时你会得到一个消息说:“通过设置操作消除空值” –

1

你可以试试这个。

SELECT * FROM Enrolled_students E1 
WHERE NOT EXISTS 
    (SELECT * FROM Enrolled_students E2 
     WHERE E1.StudentID = E2.StudentID 
      AND E1.enddate_Date IS NOT NULL 
      AND E2.enddate_Date IS NULL) 

结果:

StudentID program    StartDate    enddate_Date 
----------- -------------------- ----------------------- ----------------------- 
267342  Science    2016-09-19 00:00:00.000 NULL 
435359  math     2017-05-18 00:00:00.000 2017-08-29 00:00:00.000 
290332  Lab     2014-02-11 00:00:00.000 NULL 
相关问题