问题描述
我想使用销售表创建物化视图。
--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);
然后我想创建物化视图并获得以下输出,
解决方法
您似乎在寻找条件聚合:
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
,
评论太长了。
您不能在物化视图或其他视图中创建动态名称。您能做的最好的事情是设置一个定期检查是否出现新“列”的作业。如果是这样,那么作业将删除当前的物化视图并添加一个新的。