栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL计数包含零值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL计数包含零值

不是WHERe子句,而是GROUP BY。简而言之,查询将仅返回存在的行的数据。这意味着当您根据时间戳记的日期进行分组时,只会返回有行的日期。SQL
Server从上下文中不知道您要“填补空白”,也不知道该如何处理。

正常的答案是CTE,它会产生您想看到的所有日子,从而填补空白。这有点棘手,因为它需要递归的SQL语句,但这是一个众所周知的技巧:

WITH CTE_Dates AS(    SELECt @START AS cte_date    UNIOn ALL    SELECT DATEADD(DAY, 1, cte_date)    FROM CTE_Dates    WHERe DATEADD(DAY, 1, cte_date) <= @END)SELECtcte_date as TIME_STAMP,ISNULL(COUNT(*), 0) AS counted_leads, FROM CTE_DatesLEFT JOIN HL_Logs ON DATEADD(dd, 0, DATEDIFF(dd, 0, Time_Stamp)) = cte_dateWHERe Time_Stamp between @BEGIN and @END and ID_Location = @LOCATIonGROUP BY cte_date

分解而言,CTE使用一个引用自身的并集来一次递归地将一个日期添加到上一个日期,并记住该日期作为表的一部分。如果您运行了一个使用CTE并从中选择*的简单语句,则会看到开始和结束之间的日期列表。然后,该语句根据日志时间戳记日期将此日期列表连接到日志表,同时使用左连接保留没有日志条目的日期(从“左侧”获取所有行,无论它们在“右侧”)。最后,我们按日期分组并计数,我们应该得到想要的答案。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382232.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号