You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并两个含相同日期字段的SELECT查询及去除重复日期记录的方法

重复原因

你使用UNION拼接了两个结果集:一个是全月日期+0任务的集合,一个是有任务日期+实际统计数的集合。同一日期会生成两条字段值不完全一致的记录,UNION只能去重完全相同的行,因此无法合并这两条记录,导致出现重复行。

解决方案

改用左关联(LEFT JOIN)逻辑,以生成的全月日期序列作为左表,关联聚合后的任务统计结果,无任务的日期自动补0即可,修改后代码如下:

Declare @year int = 2021, @month int = 8;
WITH numbers 
as 
( 
    Select 1 as value 
    UNION ALL 
    Select value +1 from numbers 
    where value + 1 <= Day(EOMONTH(datefromparts(@year, @month, 1)))
) 
SELECT 
    datefromparts(@year, @month, numbers.value) AS Datum, 
    ISNULL(t.Tasks, 0) AS Tasks 
FROM numbers 
LEFT JOIN (
    SELECT CONVERT(date, added_d) AS Datum, COUNT(*) AS Tasks 
    FROM Crm.Task 
    WHERE YEAR(added_d) = @year AND MONTH(added_d) = @month 
    GROUP BY CONVERT(date, added_d)
) t ON datefromparts(@year, @month, numbers.value) = t.Datum

逻辑说明

  • 保留原CTE生成当月所有日期序列的逻辑
  • 把任务统计结果作为子查询,和日期序列做左关联
  • 用ISNULL函数将无任务日期的空统计值替换为0
  • 原代码里硬编码的年份月份替换为变量,适配动态查询需求

内容的提问来源于stack exchange,提问作者Urban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:06:01