我有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 |
有什么建議嗎?
uj5u.com熱心網友回復:
我們可以使用帶有 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<>在這里擺弄
uj5u.com熱心網友回復:
WITH
areas AS ( SELECT DISTINCT AreaName
FROM source_table ),
dates AS ( SELECT DISTINCT `Date`
FROM source_table )
SELECT AreaName, `Date`, COALESCE(Total, 0) Total
FROM areas
CROSS JOIN dates
NATURAL LEFT JOIN source_table;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452526.html
