用0填写缺失值

问题描述 投票:0回答:1

我有一个 SQL 查询和结果表如下:

SELECT *
FROM Table A 
WHERE ID = 'A' and task = 'jump'
身份证 任务 星期几 时间
A 星期一 3
A 星期二 4
A 周三 11

但我希望结果表显示一周中剩余的天数,并用 0 表示小时:

身份证 任务 星期几 时间
A 星期一 3
A 星期二 4
A 周三 11
A 星期四 0
A 周五 0
A 星期六 0
A 周日 0

我创建了一个临时表,但它只填充 DayofWeek 和小时数,但为 ID 和 Task 列留下空值。

DROP TABLE IF EXISTS #dayofweek;
CREATE TEMP TABLE #dayofweek (
    dayofweek VARCHAR (50)
    ,hours INT
);

INSERT INTO #dayofweek (
    dayofweek
    ,hours
)

VALUES 
('sunday',0)
,('monday',0)
,('tuesday',0)
,('wednesday',0)
,('thursday',0)
,('friday',0)
,('saturday',0);
身份证 任务 星期几 时间
A 星期一 3
A 星期二 4
A 周三 11
星期四 0
周五 0
星期六 0
周日 0

我怎样才能完成这个表格,我有这个适合各种ID和任务的情况。

sql mysql
1个回答
0
投票

临时表只需包含星期几。所有其他值都可以通过 COALESCE 函数获得,如果第一个参数不为空,则返回第一个参数,否则返回第二个参数。

SELECT COALESCE(A.ID, 'A'), COALESCE(A.task, 'jump'), W.DayofWeek, COALESCE(A.Hours, 0)
FROM
    #dayofweek W
    LEFT JOIN Table A
        ON
          W.dayofweek = A.DayofWeek AND
          A.ID = 'A' AND A.task = 'jump'

请注意,我们必须将所有条件包含到 JOIN 子句中,以便 LEFT OUTER JOIN 正常工作,因为条件应用于右表。

© www.soinside.com 2019 - 2024. All rights reserved.