在创建表时,可以使用ON NULL(或DEFAULT?)与select * from()pivot()来替换零值为零吗?使用ON NULL和从透视结果创建表(在oracle中)
说明: 事务表包含CUSTOMER_ID,item_qty,部门,transaction_key,销售
的任务是创造它提供了一个单独的行,包含的项目,交易量和销售量在每个数每个客户的表部。
create table merchandise_summary as
select *
from (select customer_id, item_cd, department, transaction_key, sales from transaction_table)
pivot (
sum(item_qty) items,
count(distinct transaction_key) transactions,
sum(sales) sales
for department in ('socks', 'dresses', 'shoes')
)
此表将任何客户不购买从袜子部门创建的任何空值,但在现实中的价值应该是零(客户购买零和袜子)。
在创建表后,单独的查询可能将值从null更新为零,但可以为列设置默认值吗?假设有许多部门和许多领域需要聚合,单独列出每个专栏并不方便。 (而且,是不是应该让这些操作更加的优雅枢轴操作?)
很确定它需要在内联子查询(select *语句)之外是nvl(),但是这需要列出所有列,如select svn(socks_sales,0)socks_sales,nvl(socks_items,0)socks_items ...等等 - 但我会去尝试确认 – 2014-10-30 18:06:51
也许有一种解决方案,使用pl sql来创建列名并在创建后运行“alter table ..”。 – 2014-10-30 18:09:54