在Aggregate函数中创建视图子查询

时间:2015-12-11 09:08:49

标签: sql oracle view aggregate

我希望像

一样创建摘要视图
create view XXX as (
   select 
     a,
     sum(select b from XX where c = ? ) 
  from 
    .....
)

我想要sum(...)中的某些条件,但它取决于外部参数,例如

select * from XXX where c = ?

我希望第二个sql中的条件c = ?可以像使用这个sql一样发送到视图中

   select 
     a,
     sum(select b from XX where c = ? ) 
  from 
    ...
  where c = ?

1 个答案:

答案 0 :(得分:1)

你不能。根本无法定义视图,以便您有一个占位符用于稍后将在视图上应用的条件。

这给你留下了两个选择:

  1. 尝试从数据中获取所有相关信息。例如。如果您想对是否选择某个用户做出反应,您可以计算数据集中的不同用户:
  2. case when count(distinct user) over () = 1 then (select ...) else (select ...) end

    1. 编写PL / SQL流水线函数并使用它而不是视图:
    2. select * from table( my_pipelined_function(in_user => null) )