Nest sum,datediff和case statement

时间:2016-07-07 11:42:56

标签: sql sql-server datediff

我有一张这样的表,

enter image description here

SELECT rd_rfiledelayid_pk, 
       rd_rfileid_fk_ind, 
       rd_enddate 
FROM   t_rfiledelay 
WHERE  rd_rfileid_fk_ind = '4873' 
  1. 我需要通过外键(RD_RfileID_fk_ind)获得日期不同夏日组的结果,并且条件是NULL RD_EndDate今天获得日期。
  2. 因为我这样试过,

    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 
    

    我得到了结果,

    enter image description here

    但结果需要这样,

      

    2016-06-20至2016-06-25 = 5天

         

    2016-07-01至今(2016-07-07)= 6天

         

    结果需要11天。

    你能告诉我我想念的是什么吗?

1 个答案:

答案 0 :(得分:1)

这是您想要的查询:

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;当{(1}}中的任何一个(或两个)都是=时,NULL永远不会返回true。

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