我试着将带有特定描述的产品代码和这些年来一个月内销售的产品总数相加。
使用的两个表是:
CREATE TABLE product (
prod_code NUMBER(3) NOT NULL,
prod_description VARCHAR2(75) NOT NULL,
prod_points NUMBER(2) NOT NULL
);
CREATE TABLE product_sale (
sale_no NUMBER(8) NOT NULL,
sale_datetime DATE NOT NULL,
sale_location VARCHAR2(100) NOT NULL,
prod_code NUMBER(3) NOT NULL,
officer_id NUMBER(8) NOT NULL,
);
日期格式为“dd mon yyyy hh12:mi pm”。
到目前为止,我能够表述出:
select
d.prod_description,
extract(month from sale_datetime) as mon,
count(d.prod_code) as count
from product d
join product_sale o on d.prod_code = o.prod_code
group by d.prod_description, extract(month from sale_datetime);
order by d.prod_code;
如何将计数分隔为不同的月份列,并在单独的列中获得计数的总和?
2条答案
按热度按时间ctzwtxfj1#
我只会使用条件聚合:
请注意,对于订购,
prod_code
需要在group by
--或者需要使用聚合函数,例如order by min(d.prod_code)
.如果需要单独的行作为总计,则使用
grouping sets
:js81xvg62#
所以一月一栏应该包含每年一月的计数。
我假设除了水平和,你还需要垂直和。
首先,您需要在不同的级别上进行聚合,然后
PIVOT
将不同行的数据放入同一行的不同列中。为了在不同级别进行聚合,oracle提供了
GROUP BY
扩展,例如CUBE
:现在您可以旋转:
这是一个简化的解决方案,例如,我没有在底部标记垂直总和行。有关此技术的完整解决方案和说明,请参阅https://stewashton.wordpress.com/2016/07/18/spreadsheet-like-totals-and-subtotals/