从查询创建视图-oracle

从查询创建视图-oracle,oracle,view,oracle-apex,with-clause,Oracle,View,Oracle Apex,With Clause,我有一个在oracle apex中使用的查询。是否可以从这个查询创建视图,其中是jasper报告(jasper不支持cte) 注:P99\u日期从到是参数 with cte as ( SELECT a.name, w.order as order, s.num as num, w.id, (Select count(*) from quant where id = w.id and trunc(date) between :P99_DATE_FROM an

我有一个在oracle apex中使用的查询。是否可以从这个查询创建视图,其中是jasper报告(jasper不支持cte)

注:P99\u日期从到是参数

with cte as (
SELECT
    a.name,
    w.order as order,
    s.num as num,
    w.id,
    (Select count(*) from quant where id = w.id and trunc(date) between :P99_DATE_FROM and :P99_DATE_TO) as QUANT
FROM
    web w
    left outer JOIN tabel_1 a ON a.id = w.id
    left outer JOIN tabel_2 s ON s.id = w.id
WHERE
    (trunc(s.date) between :P99_DATE_FROM and :P99_DATE_TO or :P99_DATE_FROM is null or :P99_DATE_TO is null)

)
    SELECT 
        name,
        SUM(order) as TOTAL,
        SUM(num) as NUM,
        QUANT
    from cte
    group by name,QUANT
您可以这样做,但是使用Apex提供的参数会使它(甚至)更加复杂

由于在主查询中只引用一次CTE,因此使用内联视图将更简单,将CTE查询转换为子查询:

SELECT 
    name,
    SUM(order) as TOTAL,
    SUM(num) as NUM,
    QUANT
from (
    SELECT
        a.name,
        w.order as order,
        s.num as num,
        w.id,
        (Select count(*) from quant where id = w.id and trunc(date) between :P99_DATE_FROM and :P99_DATE_TO) as QUANT
    FROM
        web w
        left outer JOIN tabel_1 a ON a.id = w.id
        left outer JOIN tabel_2 s ON s.id = w.id
    WHERE
        (trunc(s.date) between :P99_DATE_FROM and :P99_DATE_TO or :P99_DATE_FROM is null or :P99_DATE_TO is null)
)
group by name,QUANT
您可以这样做,但是使用Apex提供的参数会使它(甚至)更加复杂

由于在主查询中只引用一次CTE,因此使用内联视图将更简单,将CTE查询转换为子查询:

SELECT 
    name,
    SUM(order) as TOTAL,
    SUM(num) as NUM,
    QUANT
from (
    SELECT
        a.name,
        w.order as order,
        s.num as num,
        w.id,
        (Select count(*) from quant where id = w.id and trunc(date) between :P99_DATE_FROM and :P99_DATE_TO) as QUANT
    FROM
        web w
        left outer JOIN tabel_1 a ON a.id = w.id
        left outer JOIN tabel_2 s ON s.id = w.id
    WHERE
        (trunc(s.date) between :P99_DATE_FROM and :P99_DATE_TO or :P99_DATE_FROM is null or :P99_DATE_TO is null)
)
group by name,QUANT

WITH子句的正常使用是通过其备用名称子查询factoring来显示的。当我们想在查询中多次使用子查询时,例如在两个
which in(sub-query)
过滤器中,它们非常方便

这不适用于您的情况,因此您可以简单地将CTE转换为内联视图:

SELECT 
    name,
    SUM(order) as TOTAL,
    SUM(num) as NUM,
    QUANT
from  (
    SELECT
        a.name,
        w.order as order,
        s.num as num,
        w.id,
        (Select count(*) 
         from quant 
         where id = w.id and trunc(date) between :P99_DATE_FROM and :P99_DATE_TO) as QUANT
    FROM
        web w
        left outer JOIN tabel_1 a ON a.id = w.id
        left outer JOIN tabel_2 s ON s.id = w.id
    WHERE
        (trunc(s.date) between :P99_DATE_FROM and :P99_DATE_TO
          or :P99_DATE_FROM is null or :P99_DATE_TO is null)
    ) cte
 group by name,QUANT

WITH子句的正常使用是通过其备用名称子查询factoring来显示的。当我们想在查询中多次使用子查询时,例如在两个
which in(sub-query)
过滤器中,它们非常方便

这不适用于您的情况,因此您可以简单地将CTE转换为内联视图:

SELECT 
    name,
    SUM(order) as TOTAL,
    SUM(num) as NUM,
    QUANT
from  (
    SELECT
        a.name,
        w.order as order,
        s.num as num,
        w.id,
        (Select count(*) 
         from quant 
         where id = w.id and trunc(date) between :P99_DATE_FROM and :P99_DATE_TO) as QUANT
    FROM
        web w
        left outer JOIN tabel_1 a ON a.id = w.id
        left outer JOIN tabel_2 s ON s.id = w.id
    WHERE
        (trunc(s.date) between :P99_DATE_FROM and :P99_DATE_TO
          or :P99_DATE_FROM is null or :P99_DATE_TO is null)
    ) cte
 group by name,QUANT

为什么不直接使用内联视图呢?@AlexPoole我不知道如何使用它!为什么不直接使用内联视图呢?@AlexPoole我不知道如何使用它!