我有resutl sql语法:
SELECT AreaName, Date, Total
FROM table
GROUP BY AreaName, Date
这里结果:
区域名称 | 日期 | 全部的 |
---|---|---|
伦敦 | 2021-01-01 | 2 |
巴黎 | 2021-01-01 | 3 |
伦敦 | 2021-02-01 | 4 |
北京 | 2021-02-01 | 5 |
但如果日期数据不存在且值为 Total 0,我想包括 AreaName。就像这里:
区域名称 | 日期 | 全部的 |
---|---|---|
伦敦 | 2021-01-01 | 2 |
巴黎 | 2021-01-01 | 3 |
北京 | 2021-01-01 | 0 |
伦敦 | 2021-02-01 | 4 |
巴黎 | 2021-02-01 | 0 |
北京 | 2021-02-01 | 5 |
有什么建议吗?
我们可以使用带有 DISTINCT 的子查询来获取所有日期和所有 AreaNames 的列表,然后交叉连接它们。
警告:这会使值相乘,并可能快速创建一个包含大量零值的巨大结果集。
create table Areas( AreaName varchar(25), AreaDate Date, Total int); insert into Areas values ('London', '2021-01-01', 2), ('Paris', '2021-01-01', 3), ('London', '2021-02-01', 4), ('Beijing','2021-02-01', 5);
select a.AreaName, b.AreaDate, coalesce(c.Total,0) "Total" from (select distinct AreaName from Areas) a cross join (select distinct AreaDate from Areas) b left join Areas c on a.AreaName = c.AreaName and b.AreaDate = c.AreaDate order by AreaDate, AreaName
区域名称 | 地区日期 | 总计 :------- | :--------- | ----: 北京 | 2021-01-01 | 0 伦敦 | 2021-01-01 | 2 巴黎 | 2021-01-01 | 3 北京 | 2021-02-01 | 5 伦敦 | 2021-02-01 | 4 巴黎 | 2021-02-01 | 0
db<>在这里摆弄
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句