【问题标题】:Showing Purchase Counts for ALL months - Including 0 purchase months显示所有月份的购买计数 - 包括 0 个购买月份
【发布时间】:2017-08-24 22:35:11
【问题描述】:

我想加入一个完整的日历表,其中包含每个用户的购买数据,以显示每个用户从 2014 年到 2017 年每个月的任何购买计数。有些用户可能要到 2016 年才会购买,但我仍然希望让结果显示每个月到第一个购买日期的 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
;

【问题讨论】:

  • 为什么第一个子查询中有group-by和order-by子句;为什么要在第二个聚合?事实上,为什么你有子查询(内联视图)?
  • 我是 sql 新手,自学,所以我确定我有坏习惯。
  • @AlexPoole 请查看我更新的代码,它删除了子查询,但没有解决我的问题。有什么想法吗?

标签: sql oracle join left-join


【解决方案1】:

试试

SUM(NVL(t.trans_counter,0))

【讨论】:

  • 你得到了什么结果?
  • 所以,我希望每个用户 id 有大约 48 行,2014-2017 年每个月 1 行,然后每个月有相应的购买次数,包括 0 个月。我只为每个有购买计数的用户获取行。
  • 例如,如果用户在 2015 年有交易但在 2014 年没有交易,那么该用户是否应该在该年以及所有月份的计数为零?
  • 正确,我希望从 2014 年 1 月到 2017 年为每个用户设置 48 个月的标准设置。即使用户的第一笔交易是在 2016 年,我希望从 2014 年 1 月开始为 0每个人。我最大的问题实际上是交易之间的所有月份,它们将显示为 0,并没有显示在结果中。我正在尝试从所有这些缺失的月份中计算出来。
  • 你能显示你从上面的查询得到的结果吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 2022-01-08
  • 1970-01-01
  • 2021-10-13
  • 2018-03-01
相关资源
最近更新 更多