Sql 缺少ID时序列中数字之间的差异

Sql 缺少ID时序列中数字之间的差异,sql,sql-server-2008,datediff,sequences,Sql,Sql Server 2008,Datediff,Sequences,我试图获得日期之间的月数,这些月数有一个DateOrderID,可以将它们放入订单中(最早的日期是1,第二个是2等等)。我的问题是,因为DateOrder ID是手动输入的,所以我有一些缺少DateOrderID的记录,所以我的查询会为该字段返回NULL。我的(虚拟)代码是: 这是当前返回的 PersonID Date DateOrder Months_Between 101 20150401 1 First Date 101 2

我试图获得日期之间的月数,这些月数有一个DateOrderID,可以将它们放入订单中(最早的日期是1,第二个是2等等)。我的问题是,因为DateOrder ID是手动输入的,所以我有一些缺少DateOrderID的记录,所以我的查询会为该字段返回NULL。我的(虚拟)代码是:

这是当前返回的

PersonID    Date     DateOrder  Months_Between
101         20150401    1       First Date
101         20160621    2       14
101         20170301    3       9
102         20110506    1       First Date
102         20140817    3       NULL
102         20160906    4       25

我想要的结果是将Personid102的NULL替换为类似“缺少ID”的内容。我在case语句中尝试了一些方法,但没有成功,有什么想法吗?

左对齐SQL太难阅读了…请标记您正在使用的dbms。这里有一些产品的细节…SQL Server 2008为什么围绕CASE表达式的简单ISNULL()不起作用呢?它起作用了-我试图计算ID号之间的差异,这使它过于复杂了尝试在CASE语句的ELSE分支中使用ISNULL()函数。很好-再次尝试复杂的事情,而不考虑简单的解决方案。非常感谢!
SELECT a.PersonID ,
  a.Date ,
  a.DateOrderID ,
  CASE
    WHEN a.DateOrderID = 1
    THEN 'First Date'
    ELSE ISNULL(CONVERT(VARCHAR(5),DATEDIFF(MONTH, b.Date, a.Date)),'Missing Date')
  END AS Months_Between
FROM OrderTable a
LEFT JOIN OrderTable b
ON a.PersonID     = b.PersonID
AND a.DateOrderID = b.DateOrderID +1
SELECT a.PersonID ,
  a.Date ,
  a.DateOrderID ,
  CASE
    WHEN a.DateOrderID = 1
    THEN 'First Date'
    ELSE ISNULL(CONVERT(VARCHAR(5),DATEDIFF(MONTH, b.Date, a.Date)),'Missing Date')
  END AS Months_Between
FROM OrderTable a
LEFT JOIN OrderTable b
ON a.PersonID     = b.PersonID
AND a.DateOrderID = b.DateOrderID +1