物化视图

问题描述

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

--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,ID) VALUES ('Bystolic','1985',23884,2);
INSERT INTO SALES_DATA (Product,ID) VALUES ('Hydrocodone/APAP','1955',30428,3);

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

enter image description here

解决方法

您似乎在寻找条件聚合:

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
,

评论太长了。

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