选择MODEL子句以在结果集上添加列,而不仅仅是新行?

时间:2016-07-26 19:49:40

标签: sql oracle pivot

PIVOT只能将一个值转换为一列。 另外,如果我们想要转换和(分组)相交的值范围,PIVOT也没有帮助。

所以我们计划使用MODEL子句来克服这个限制。

我们必须转向列:

  • sum(),count()在过去2年的不同季度的数据和 将每个季度的结果显示在自己的一组列中;
  • sum(),count()过去2年不同年份的数据,并将每年的结果列入其自己的一列;
  • sum(),count()在过去3个月的不同月份中的数据,并将每个月的结果显示在其自己的一组列中。

分组中的季度/年/月的列表是固定的,并且可以在MODEL子句中进行硬编码(即,它总是要回顾2年)。

我有一个使用三个独立枢轴的上述工作原型,但效率非常低,因为每个枢轴都必须再次传递我们庞大的数据集。

我们预计MODEL可能只需要一次通过数据集。

问题:

  • MODEL子句是否可以创建新列(即我们分组
    按月和子查询中的产品类别,但MODEL应添加
    以上季度/年/月桶的列)?
  • 我们无法想出定义DIMENSION BY和MEASURES的最佳方法 创建新专栏......非常感谢任何想法。

编辑:在https://community.oracle.com/message/13951429

发布了相同的问题

1 个答案:

答案 0 :(得分:1)

您可以使用多个数据透视列和多个结果列进行PIVOT

with atc as
   (select owner, table_name, column_name, data_type, nullable
   from all_tab_columns
   where table_name = 'ALL_TAB_COLUMNS')
select * 
from atc
pivot 
      (max(column_name) as max_col_name, min(column_name) as min_col_name
      for (data_type, nullable) in
         (
            ('NUMBER','N') as dt_number_n, ('VARCHAR2','N') as dt_vc_n,
            ('NUMBER','Y') as dt_number_y, ('VARCHAR2','Y') as dt_vc_y
         )
   )