sql - 显示日期甚至零值 SQL
问题描述
我有 SQL 查询:
SELECT Date, Hours, Counts FROM TRANSACTION_DATE
示例输出:
Date | Hours | Counts
----------------------------------
01-Feb-2018 | 20 | 5
03-Feb-2018 | 25 | 3
04-Feb-2018 | 22 | 3
05-Feb-2018 | 21 | 2
07-Feb-2018 | 28 | 1
10-Feb-2018 | 23 | 1
如果你能看到,有几天因为没有数据/空而丢失,但我希望显示丢失的日期并且值为零:
Date | Hours | Counts
----------------------------------
01-Feb-2018 | 20 | 5
02-Feb-2018 | 0 | 0
03-Feb-2018 | 25 | 3
04-Feb-2018 | 22 | 3
05-Feb-2018 | 21 | 2
06-Feb-2018 | 0 | 0
07-Feb-2018 | 28 | 1
08-Feb-2018 | 0 | 0
09-Feb-2018 | 0 | 0
10-Feb-2018 | 23 | 1
提前谢谢你。
解决方案
您需要生成一系列日期。如果没有太多,递归 CTE 是一种简单的方法:
with dates as (
select min(date) as dte, max(date) as last_date
from transaction_date td
union all
select dateadd(day, 1, dte), last_date
from dates
where dte < last_date
)
select d.date, coalesce(td.hours, 0) as hours, coalesce(td.count, 0) as count
from dates d left join
transaction_date td
on d.dte = td.date;
推荐阅读
- java - Id 没有在 Spring Boot 中自动保存
- angularjs - CORS post call在Angularjs中不起作用
- java - Spring Boot应用程序,如何将Java对象传递给应用程序?
- firebase - 颤振 | 如何将数据添加到 Firestore 中的现有文档
- python - Keras 中用于 idct 的自定义层
- python - 处理单个字典的嵌套循环
- wordpress - Woocommerce - 根据用户名重定向用户
- android - 在前台的我的应用程序活动中隐藏通知面板(通知滑块或通知栏)
- google-chrome - 谷歌翻译不工作
- linux - 使用 sed 删除最后一个换行符