如果值不存在,如何连接两个表和 return 0?

how to join two tables and return 0 if value is not exists?

我有两个 table、hoursmessages

hours table 只有一列 hour 和 0~23 个值插入。

messages table 也有 hour 列。

我正在尝试加入这些 table。但我的查询不起作用。

select hours.hour,ifnull(count(*),0) from hours left join messages on messages.hour = hours.hour group by hours.hour

样本数据在这里

消息Table

id    text         sender    datetime                     hour
1     Hi, John     Amy       2015-12-10 13:37:25 +0000    13
2     Yup          Mike      2015-12-10 15:49:11 +0000    15
3     you there?   Mike      2015-12-10 15:49:34 +0000    15

小时 Table

hour
0
1
2
3
4
..
23

我的查询结果

hour    ifnull(count(*),0)
0       1
1       1
2       1
3       1
4       1
...
13      1
14      1
15      2
...
24      1

我想要的

hour    ifnull(count(*),0)
0       0
1       0
2       0
3       0
...
13      1
14      0
15      2
...
24      0

如何连接两个 table 并获得如上所示的结果?

使用 CASE 条件和 Full Join 我们可以实现这个

DECLARE  @Table1 TABLE 
    (id int, text varchar(8), sender varchar(4), datetime varchar(25), hour int)
;

INSERT INTO @Table1
    (id, text, sender, datetime, hour)
VALUES
    (1, 'Hi, John', 'Amy', '2015-12-10 13:37:25 +0000', 13),
    (2, 'Yup', 'Mike', '2015-12-10 15:49:11 +0000', 15)
;

DECLARE @Table2  TABLE 
    (hour int)
;

INSERT INTO @Table2
    (hour)
VALUES
    (0),
    (1),
    (2),
    (3),
    (4),
    (6),
    (7),
    (8),
    (9),
    (13),
    (15),
    (16),
    (23)
;

   Select T.hour,
CASE WHEN cnt <> 0 THEN 
ROW_NUMBER()OVER(PARTITION BY T.cnt 
    ORDER BY (SELECT NULL)) 
ELSE CNT END cnt from (
select TT.hour,
CASE WHEN ISNULL(T.hour,0)<> 0 
THEN 1 ELSE ISNULL(T.hour,0) 
    END cnt  
        from @Table1  T
    FULL JOIN @Table2 TT
    ON TT.hour = T.hour

)T
ORDER BY T.hour