oracle - 如何显示产品 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;
解决方案
您必须使用 group by 和 rollup
推荐阅读
- javascript - 是否可以从节点脚本设置系统环境变量?
- c - C 编译器会从包含的库中删除重复的常见包含吗?
- python - Python pynput.keyboard.write() 重复发送文本相同的文本和未请求的文本部分
- python - 我收到错误“ValueError:NumPy 布尔数组索引分配无法将 100 个输入值分配给掩码为真的 90 个输出值”
- rust - 使用 serde 序列化嵌套的对象数组
- javascript - 如何从 JavaScript 的下拉菜单中查询数值?
- python - 旋转基于其他字符串的字符串
- ios - UIScrollView 中的子视图控制器
- android - 我无法将颤振下载到 vs 代码。如何手动安装 VSIX?
- node.js - 如何在 NodeJS 中使用 Array 输入重复相同的 Promise,直到它解析或 Array 结束?