SQL - 即使没有可用数据,如何返回每月的每一天

亚利桑那72

以下是我的初始查询及其返回的数据:

SELECT
    User
    ,Client
    ,Date
    ,Total
FROM SampleTable 
WHERE Date BETWEEN '20200101' AND '20200131'

初始查询结果

相反,我希望它在一个月中的每一天都包含一行,如下表所示:

预期查询结果

我已经有一个标准的 ANSI 日期表;但是,我一直无法找到包含也需要加入(用户/客户端)的维度的解决方案:

希望我的桌子看起来像这样:

意外查询结果

我想我的答案就在交叉应用/子查询领域的某个地方,但我是 SQL 的新手,所以我无法准确理解这将如何完成。任何帮助,将不胜感激。谢谢!

戈登·利诺夫

如果表中包含所有日期,则可以将其用作源。然后一个cross joinleft join

select uc.user, uc.client, d.date,
       coalesce(st.total, 0)
from (select distinct user, client
      from sampletable
     ) uc cross join
     (select distinct date
      from sampletable
     ) d left join
     sampletable st
     on st.user = uc.user and st.client = uc.client and
        st.date = d.date;

如果基表没有所有日期,您可以通过多种方式生成它们:

  • 使用日历表。
  • 使用递归 CTE。
  • 生成一堆数字并构建日期。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我试图自动化一个SQL查询以在每月的每一天运行,而循环不起作用。查询给出错误1064

SQL查询以查找6个月内的每月的最后一天

SQL查询以计算日期范围内每月的第一天的库存

获取每月的最后一天(SQL Server 2008R2)

如何从计算值循环到每月的每一天

返回数据,即使没有记录存在SQL Server

雄辩的:获取每月的每一天的数据

每月每一天的SQL Server 2008出勤报告

SQL对于过去一周的每一天中创建的记录数返回零

在SQL / LookerML中,如何测量一组天的平均计数,每一天都有自己的数据点

使用SQL确保我在特定时间段的每一天都有数据

使用date()函数,如何获取每月的每一天?

选择未来5年每月使用SQL的同一天?

获得每月的每一天的价值

SQL-创建临时表或每月第一天和月份名称的CTE

SQL即使没有数据也返回行

SQL Server-前一天的数据检索

在SQL中选择最近30天中的每一天的平均价格

分解一个sql表,并为不存在的每一天插入一行

SQL Server:每天我有多条记录,我只想返回第一天

SQL查找数据集的月份的第一天

如何在Sql Server查询中获取每月最后一天的行

带有列中给出的每月每一天数据的时间表 – 如何转换为日期?

SQL Server:返回一天中最近时间的坐标

如果该月没有条目,如何选择该月的最后一天 SQL

如何使用 SQL 返回日期范围内一天的平均值?

如何SQL查询有交易的月份的最后一天?

一個嵌套的“for”循環,返回每月的每一天

在sql db2中從到到日期之間的每一天選擇1行