我想要创建一个表的问题。 我有一张桌子,用于商店销售的每一天每家商店的累计销售额。这意味着如果商店在特定日期没有销售,那么这个观察就没有了。
我想要的是每天每家商店的一条线,也就是商店没有任何销售的日子,在这种情况下,每日销售额只有零。
我尝试在每日generate_series和上面提到的表之间进行完全外连接。
void CPictureCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if (mBIsPicLoaded) {
RECT rc;
this->GetClientRect(&rc);
INT width = (INT) rc.right - rc.left;
INT height = (INT)(rc.bottom - rc.top);
Graphics graphics(lpDrawItemStruct->hDC);
Image image(mPstream);
graphics.DrawImage(&image, (INT)rc.left, (INT)rc.top, width, height);
}
但如果商店没有任何销售,这不会给我一排零。 希望你们能帮助我。谢谢!
答案 0 :(得分:0)
您确定表date
中的列revenue
是DATE
类型
我修改了你的查询,试试这个:
select
timeline::date as date,
store_rev.store_name,
store_rev.store_daily_rev
from
(
select
timeline::date as date
from
generate_series('2017-03-01', now(),'1 day') AS timeline
) timeline
JOIN(select
r.date,
r.store_name,
r.store_daily_rev,
FROM revenue r) store_rev ON timeline.date::date = store_rev.date::date;
答案 1 :(得分:0)
我认为您希望cross join
后跟left join
。这将获得所有组合:
select timeline.date, s.store_name,
coalesce(r.store_daily_rev, 0) as store_daily_rev
from generate_series('2017-03-01', now(), '1 day') as timeline(date) cross join
(select distinct r.store_name from revenue r) s left join
revenue r
on r.store_name = s.store_name and r.date = timeline.date;
cross join
生成所有行(日期和商店的组合)。 left join
会为拥有它们的商店/日期带来收入值。