2017-08-24 49 views
0

我想加入一个完整的日历表,每个用户购买数据以显示每个用户从2014年到2017年每月的任何购买计数。有些用户可能不会直到2016年才会有购买,但我仍然希望结果在第一个购买日期的每个月都显示0,以及在几个月之间的任何0。显示所有月份的购买次数 - 包括0个购买月份

我不能得到0个月被列入!我认为这是因为我在许多独特的用户中这样做,但感觉下面的代码应该可以工作。

select 
    c.fscl_yr_num 
    ,c.fscl_month_num 
    ,t.user_id 
    ,sum(nvl(t.trans_counter, 0)) 
from 
    appca.d_cal c 
left join 
    transaction_data t 
    on c.cal_dt = t.trans_dt 
    and t.trans_type = 'Purchase' 
    and c.fscl_yr_num in (2014, 2015, 2016, 2017) 
group by 
    c.fscl_yr_num 
    ,c.fscl_month_num 
    ,t.user_id 
order by 
    t.user_id 
    ,c.fscl_yr_num 
    ,c.fscl_month_num 
; 
+0

为什么你在group-by和订单在第一子查询条款;为什么在第二次聚合呢?事实上,为什么你有子查询(内联视图)呢? –

+0

我是全新的sql并教授自己,所以我确信我有坏习惯。 –

+0

@AlexPoole请参阅我的更新代码,它删除了子查询,但没有解决我的问题。有任何想法吗? –

回答

0

尝试

SUM(NVL(t.trans_counter,0)) 
+0

不幸的是,这并没有奏效。 –

+0

你会得到什么结果? –

+0

因此,我希望每个用户ID都有〜48行,每个月有1个2014-2017,然后在每个月内进行相应的购买计数,包括0个月。我只收到每个有购买计数的用户的行数。 –