sql - 如果在 UNION 查询中未找到某些日期的记录,则返回 0
问题描述
我有以下查询
SELECT
COUNT(c.ID) as RECORD_COUNT, c.WEEK_START, c.LABEL
FROM
(SELECT
a.ID, TRUNC(a.START_DATE,'IW') WEEK_START, 'YES' as LABEL
FROM
TABLE1 a
UNION ALL
SELECT
b.ID, TRUNC(b.START_DATE,'IW') WEEK_START, 'NO' as LABEL
FROM
TABLE1 b
WHERE
FUNCTION(b.ID) = 'Test') AS c
我得到的是每周的记录数,出现在第一个子查询中带有标签YES
的记录数,以及每周出现在带有标签的第二个子查询中的记录数NO
。
例子:
RECORD_COUNT WEEK_START LABEL
100 1/28/2019 YES
24 1/28/2019 NO
81 2/4/2019 YES
229 2/11/2019 YES
6 2/11/2019 NO
很多时候第二个子查询不返回任何记录,所以我缺少某些日期的行。
在上面的示例中,它没有为 for 的行返回任何NO
内容2/4/2019
。
如何修改我的查询以使其对没有数据的行返回零?
我想看到的是这样的:
RECORD_COUNT WEEK_START LABEL
100 1/28/2019 YES
24 1/28/2019 NO
81 2/4/2019 YES
0 2/4/2019 NO
229 2/11/2019 YES
6 2/11/2019 NO
解决方案
有更复杂的方法可以更普遍地工作。但是对于您的情况,一种简单的方法是:
SELECT COUNT(c.ID) as RECORD_COUNT, c.WEEK_START, c.LABEL
FROM
(
SELECT a.ID,
TRUNC(a.START_DATE,'IW') WEEK_START,
'YES' as LABEL
FROM TABLE1 a
UNION ALL
SELECT DECODE(FUNCTION(b.ID),'Test',b.ID,NULL) ID,
TRUNC(b.START_DATE,'IW') WEEK_START,
'NO' as LABEL
FROM TABLE1 b
) as c
推荐阅读
- c - winsock2:RAW SOCKET recvfrom() 返回错误 10022(无效参数)
- swift - 使用 NSBezierPath、CAShapeLayer 和 CAGradientLayer 绘制一条带渐变的线
- python - 解决四和问题的时间复杂度?
- jquery - 为什么使用带有 Angular/TypeScript 的 floatThead 会产生错误 Property 'floatThead' does not exist on type 'JQuery
' - android - 将 SearchView 与自定义 searchSuggestAuthority 一起使用时来自系统的不需要的建议
- flutter - flutter [在初始化程序中只能访问静态成员]
- java - 如果我不同步方法,后台发生了什么导致应用程序运行而控制台不打印任何内容?
- c++ - 通过 SSH 的 SDL2 按键
- mongodb - 如何创建一个 mongo db 包
- python - 如果我的目标答案位于行而不是列中,如何为监督学习实施训练数据?