首页 > 解决方案 > 如何显示产品 5 在 2000 年 4 月、5 月和 6 月的一周中每一天的 amount_sold 总和?

问题描述

我需要执行查询以显示销售产品 5 的月份名称、产品名称、星期一至星期日每天的销售量(例如,星期一销售了 30、10、60 和 I' ve 对它进行求和并将其显示在 Monday 列下为 100)我希望有一个功能表,其中所有数据都正确显示。我只在 oracle 上工作过这项任务。除了每天的 amount_sold 的总和之外,我所做的一切然后我必须汇总,所以我在 4 月、5 月和 6 月的每个月都有 3 行,其中包含所有数据。

select t.calendar_month_name as "SALES_MONTH", 
upper(concat(substr(p.prod_name,1,instr(p.prod_name,' ')-2),' &'))
||''|| concat(substr(p.prod_name,-1,instr(' ',p.prod_name)-1), '')
||''|| concat(substr(p.prod_name,instr(p.prod_name, ' ')), '')
||'('|| p.prod_id ||')'|| '' PRODUCT_NAME, t.calendar_month_number, t.time_id, t.DAY_NUMBER_IN_WEEK,
s.amount_sold, count(distinct t.day_number_in_week), 
sum(case when t.day_number_in_week = 1 then s.amount_sold else 0 end) as MONDAY

from products p
join sales s on p.prod_id = s.prod_id
join times t on t.time_id = s.TIME_ID
where
p.prod_id = 5 and 
s.time_id = t.time_id and
t.calendar_year = 2000 and
t.calendar_quarter_number = 2 and
s.amount_sold > 0 
group by t.calendar_month_name, upper(concat(substr(p.prod_name,1,instr(p.prod_name,' ')-2),' &'))
||''|| concat(substr(p.prod_name,-1,instr(' ',p.prod_name)-1), '')
||''|| concat(substr(p.prod_name,instr(p.prod_name, ' ')), '')
||'('|| p.prod_id ||')'|| '',t.calendar_month_number, t.time_id, t.DAY_NUMBER_IN_WEEK,
s.amount_sold
order by t.calendar_month_number, t.time_id, t.day_number_in_week;

标签: oracle

解决方案


您必须使用 group by 和 rollup


推荐阅读