SQL Server 2005派生字段w / logic

时间:2010-10-07 15:00:45

标签: sql-server-2005

我有三个表Pproject,ProjectMilestone和ReleaseSchedule。

我想将一个派生字段添加到名为EndDate的项目表中。

这个名为EndDate的新字段的值应该是ProjectMilestone.EndDate和ReleaseSchedule.EndDate这两个值中较大的一个。

在这两个表中获取EndDate的两个数据点的SQL逻辑是这样的:

从ProjectMilestone中选择EndDate 其中MilestoneCID = 77 和projectId = project.projectId

从ReleaseSchedule中选择EndDate 其中MilestoneCID = 77 releaseId = project.releaseId

所以我基本上需要派生字段是这两个值中较大的一个,如果这两个值都没有'N / A'

我正是在这一点上试图让案例陈述起作用......

ALTER TABLE项目 添加EndDate AS(ProjectMilestone.EndDate< ReleaseSchedule.EndDate THEN ProjectMilestone.EndDate ELSE ReleaseSchedule.EndDate END)

如果两者都为空,我如何获得N / A?

感谢所有

1 个答案:

答案 0 :(得分:2)

这可能会在您的客户端应用程序中更好地处理,但您可以在T-SQL中执行此操作,如下所示。

CASE语句的所有输出必须具有相同的数据类型,因此您必须将日期转换为char或varchar。

ALTER TABLE Project 
ADD EndDate AS 
ISNULL((CASE 
  WHEN ProjectMilestone.EndDate < ReleaseSchedule.EndDate 
    THEN CAST(ProjectMilestone.EndDate AS VARCHAR(50))
  ELSE 
    CAST(ReleaseSchedule.EndDate AS VARCHAR(50)) 
  END), 'N/A')

或者,您可以使用CONVERT而不是CAST,然后指定日期样式以获得更漂亮的日期。