物化视图

时间:2020-12-27 06:24:44

标签: sql oracle sum pivot materialized-views

我想使用销售表创建物化视图。

--CREATE TABLE SALES_DATA (
--  Product varchar2(255) default NULL,
--  Date1 varchar2(255),
--  Sale varchar2(50) default NULL,
--  ID number default NULL
--);

这是我的销售表。 销售表的示例数据,

INSERT INTO SALES_DATA (Product,Date1,Sale,ID) VALUES ('Premarin','1977',22385,1);
INSERT INTO SALES_DATA (Product,Date1,Sale,ID) VALUES ('Bystolic','1985',23884,2);
INSERT INTO SALES_DATA (Product,Date1,Sale,ID) VALUES ('Hydrocodone/APAP','1955',30428,3);

然后我想创建物化视图并获得以下输出,

enter image description here

2 个答案:

答案 0 :(得分:0)

您似乎在寻找条件聚合:

create materialized view mymview as 
select product,
    sum(case when date1 = 2016 then sale else 0 end) as sales_2016,
    sum(case when date1 = 2017 then sale else 0 end) as sales_2017,
    sum(case when date1 = 2018 then sale else 0 end) as sales_2018
    ...
from sales_data
group by product

注意:您的示例架构未使用正确的数据类型。 date1 是一年,所以它应该是一个数字(或者更好的是 date)而不是一个字符串。 sale 是一个数量,所以它应该是一个 number,而不是一个字符串。如果你真的有这些字符串,那么你需要调整条件表达式,比如:

    sum(case when date1 = '2016' then to_number(sale) else 0 end) as sales_2016

答案 1 :(得分:0)

评论太长了。

您不能在物化视图或其他视图中创建动态名称。您能做的最好的事情是设置一个定期检查是否出现新“列”的作业。如果是这样,那么作业将删除当前的物化视图并添加一个新的。