如何用单条SQL语句获取含截至今日工作日总和的三列查询结果?
解决方法:在同一条SELECT语句中同时获取Planned与Overdue列
嘿,这事儿不难搞定!咱们只需要在原有的聚合逻辑里加个条件求和,就能把Overdue列也一并算出来啦。
核心思路很明确:Overdue列要统计的是**截至今日(即EndDate早于当前日期)**的WorkingDay总和,所以用CASE语句做个条件判断,符合逾期条件的记录才计入求和,不符合的就贡献0值,不会影响最终结果。
修改后的完整代码如下:
;With cte as ( Select [Id] ,[Event_Id] ,[StartDate] ,[EndDate] ,[WorkingDay] From BaseTable ) Select Id, SUM(WorkingDay) as Planned, -- 原有的总计划工作日统计 SUM(CASE WHEN EndDate < GETDATE() THEN WorkingDay ELSE 0 END) AS Overdue -- 截至今日的逾期工作日总和 From cte Group By Id, Event_Id
小细节补充:
GETDATE()是SQL Server里获取当前日期时间的函数,如果用的是MySQL请换成CURDATE(),PostgreSQL则用CURRENT_DATE,根据你的数据库类型调整就行。- 整个逻辑不需要额外的子查询或表关联,直接在原有聚合层加条件求和,既简洁又高效。
内容的提问来源于stack exchange,提问作者Elio Fernandes
相关产品推荐
相关产品推荐

