2017-06-12 45 views
0

如何在存储过程中设置标志,如果记录的效果日期为空,则显示它,否则ObsDate不要显示它。这是我的SP获取最新日期。我需要添加另一列到我的表吗?如何在存储过程中设置标志如果记录为空显示其他不显示它

SELECT 
    StudentNames.LName, 
    StudentNames.FName, 
    MAX(StudentNames.EffDate) AS Date, 
    StudentNames.ObsDate, 
    StudentNames.StudentID 
FROM StudentNames 
GROUP BY 
    StudentNames.LName, 
    StudentNames.FName, 
    StudentNames.ObsDate, 
    StudentNames.StudentID 

回答

0

我想这就是你要求的。你需要一个CASE语句。

SELECT 
    StudentNames.LName, 
    StudentNames.FName, 
    MAX(StudentNames.EffDate) AS Date, 
    --Begin Case statement. Check if EffDate is null 
    CASE WHEN StudentNames.EffDate IS NULL 
     THEN StudentNames.ObsDate 
     ELSE NULL END AS 'ObsDate', 
    --End Case statement 
    StudentNames.StudentID 
FROM StudentNames 
GROUP BY 
    StudentNames.LName, 
    StudentNames.FName, 
    StudentNames.ObsDate, 
    StudentNames.StudentID 

如果您的目的是合并两个日期列,您可以这样做。

SELECT 
    StudentNames.LName, 
    StudentNames.FName, 
    --Begin Case statement. Check if EffDate is null 
    CASE WHEN StudentNames.EffDate IS NULL 
     THEN StudentNames.ObsDate 
     ELSE MAX(StudentNames.EffDate) END AS 'Date', 
    --End Case statement 
    StudentNames.StudentID 
FROM StudentNames 
GROUP BY 
    StudentNames.LName, 
    StudentNames.FName, 
    StudentNames.ObsDate, 
    StudentNames.StudentID 
+0

您不能在同一字段中使用不同的数据类型,如日期和字符串。 –

+0

好的。谢谢詹姆斯。 – Jason

+0

它的工作原理,必须添加一个Where子句:WHERE StudentNames.StudentID = StudentIDs.StudentID AND St​​udentNames.ObsDate IS NULL – bthumber

相关问题