嵌套总和、datediff 和 case 语句

Nest sum,datediff and case statement

我有一个table这样的,

SELECT rd_rfiledelayid_pk, 
       rd_rfileid_fk_ind, 
       rd_enddate 
FROM   t_rfiledelay 
WHERE  rd_rfileid_fk_ind = '4873' 
  1. 我需要通过外键 (RD_RfileID_fk_ind) 获得结果作为 date different summery 组,标准是 NULL RD_EndDate 得到今天日期。

因为我这样试过,

SELECT rd_rfileid_fk_ind, 
       Sum(Datediff(day, rd_startdate, CASE 
                                         WHEN rd_enddate = NULL THEN Getdate() 
                                         ELSE rd_enddate 
                                       END)) AS ES_SubmittorDelays 
FROM   t_rfiledelay 
WHERE  rd_rfileid_fk_ind = '4873' 
GROUP  BY rd_rfileid_fk_ind 

我得到了结果,

但结果需要这样,

2016-06-20 to 2016-06-25 = 5 days

2016-07-01 to today (2016-07-07) = 6 days

and result need to be 11 days.

你能告诉我我在这里想念什么吗?

这是您想要的查询:

SELECT RD_RfileID_fk_ind,
       SUM(DATEDIFF(day, RD_Startdate, COALESCE(RD_EndDate, GETDATE() ))
          ) as ES_SubmittorDelays
FROM t_RfileDelay 
WHERE RD_RfileID_fk_ind = '4873'
GROUP BY RD_RfileID_fk_ind;

你的问题是= NULL。正确的语法是IS NULL= 当其中一个(或两个)参数为 NULL.

时,returns 永远不会为真

无论如何,COALESCE()CASE更简单。