Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql 如何在此查询中使用with语句?_Plsql_With Statement - Fatal编程技术网

Plsql 如何在此查询中使用with语句?

Plsql 如何在此查询中使用with语句?,plsql,with-statement,Plsql,With Statement,在这个查询中,我想使用with语句。我有一个子查询,它计算一个union all B,我想将它与with语句一起使用。但当我使用with语句时,我会遇到一个错误,即表或视图不存在。 令我惊讶的是,当我用语句替换第一部分时,它工作正常。但是当我替换第二部分时,我面临这个错误 select deposit.BRNCH_COD||'-'||deposit.DP_TYPE_COD||''||deposit.CUSTOMER_NUM||'- '||deposit.DEPOSIT_SERIAL

在这个查询中,我想使用with语句。我有一个子查询,它计算一个union all B,我想将它与with语句一起使用。但当我使用with语句时,我会遇到一个错误,即表或视图不存在。 令我惊讶的是,当我用语句替换第一部分时,它工作正常。但是当我替换第二部分时,我面临这个错误

select 

 deposit.BRNCH_COD||'-'||deposit.DP_TYPE_COD||''||deposit.CUSTOMER_NUM||'- 
 '||deposit.DEPOSIT_SERIAL  AS DEPOSIT_NUMBER,
      deposit.IBAN              AS IBAN,
      deposit.CURRENCY_DESC     AS DEPOSIT_CURRCOD,
      deposit.BRNCH_COD         AS BRNCH_COD,
      MAIN_7.Still_Days                                                                           
AS Still_Lenght,
      to_char(MAIN_7.Startdate, 'yyyy/mm/dd' ,'nls_calendar=persian') AS 
 START_DATE,
      MAIN_7.AMOUNT                                                                               
  AS TOTAL_AMOUNT,
      MAIN_7.TRN_Count                                                                            
AS TRN_Count

      from
      (

      select  Trans_Table.DEPOSIT_KEY                     AS DEPOSIT_KEY,
      Trans_Table.TRN_Start_DATE                  AS Startdate,
      MAX(Active_Time_Table.EFFECTIVE_DATE)       AS Lastdate,
      H.PASSIVE_DAYS                    AS Still_Days,
      SUM(Active_Time_Table.AMOUNT)               AS AMOUNT,
      Count(Active_Time_Table.AMOUNT)             AS TRN_Count
      from
      (
      Select F.DEPOSIT_KEY,
      SUM (F.AMOUNT)         AS TRN_AMOUNT,
      MIN (F.EFFECTIVE_DATE) AS TRN_Start_DATE
      from
      (
      A
      union all
      B
      )F
      Group by (F.DEPOSIT_KEY)
      Having ( SUM (F.AMOUNT) >10000000000)
      )Trans_Table


      inner join
     H
      on (Trans_Table.DEPOSIT_KEY = H.DEPOSIT_KEY and 
       Trans_Table.TRN_Start_DATE-1 = H.EFFECTIVE_DATE)

      inner join
      (

      A
      union all
      B
      )Active_Time_Table
      on (Trans_Table.DEPOSIT_KEY = Active_Time_Table.DEPOSIT_KEY and 
      Active_Time_Table.EFFECTIVE_DATE - Trans_Table.TRN_Start_DATE< 4 and 
      Active_Time_Table.EFFECTIVE_DATE - Trans_Table.TRN_Start_DATE>=0)

      group by ( Trans_Table.DEPOSIT_KEY , 
      Trans_Table.TRN_Start_DATE,H.PASSIVE_DAYS)
      Having  (SUM(Active_Time_Table.AMOUNT)) > 10000000000
      )MAIN_7


      inner join dimamldeposit deposit
      on deposit.DEPOSIT_KEY = MAIN_7.DEPOSIT_KEY



       ***********************************************************


   with rep as
  (A union all B)
    select

      deposit.BRNCH_COD||'-'||deposit.DP_TYPE_COD||'- 
    '||deposit.CUSTOMER_NUM||'-'||deposit.DEPOSIT_SERIAL  AS DEPOSIT_NUMBER,
      deposit.IBAN              AS IBAN,
      deposit.CURRENCY_DESC     AS DEPOSIT_CURRCOD,
      deposit.BRNCH_COD         AS BRNCH_COD,
      MAIN_7.Still_Days                                                                           AS Still_Lenght,
      to_char(MAIN_7.Startdate, 'yyyy/mm/dd' ,'nls_calendar=persian') AS START_DATE,
      MAIN_7.AMOUNT                                                                               AS TOTAL_AMOUNT,
      MAIN_7.TRN_Count                                                                            AS TRN_Count
      from
      (
      select  Trans_Table.DEPOSIT_KEY                     AS DEPOSIT_KEY,
      Trans_Table.TRN_Start_DATE                  AS Startdate,
      MAX(rep.EFFECTIVE_DATE)       AS Lastdate,
      H.PASSIVE_DAYS                    AS Still_Days,
      SUM(rep.AMOUNT)               AS AMOUNT,
      Count(rep.AMOUNT)             AS TRN_Count
      from
      (
      Select rep.DEPOSIT_KEY,
      SUM (rep.AMOUNT)         AS TRN_AMOUNT,
      MIN (rep.EFFECTIVE_DATE) AS TRN_Start_DATE
      from
     rep
      Group by (rep.DEPOSIT_KEY)
      Having ( SUM (rep.AMOUNT) >10000000000)
      )Trans_Table
      inner join
     H
      on (Trans_Table.DEPOSIT_KEY = H.DEPOSIT_KEY and Trans_Table.TRN_Start_DATE-1 = H.EFFECTIVE_DATE)

      inner join
      rep rep
      on (Trans_Table.DEPOSIT_KEY = rep.DEPOSIT_KEY and rep.EFFECTIVE_DATE - Trans_Table.TRN_Start_DATE< 4 and rep.EFFECTIVE_DATE - Trans_Table.TRN_Start_DATE>=0)

      group by ( Trans_Table.DEPOSIT_KEY , Trans_Table.TRN_Start_DATE,H.PASSIVE_DAYS)
      Having  (SUM(rep.AMOUNT)) > 10000000000
      )MAIN_7


      inner join dimamldeposit deposit
      on deposit.DEPOSIT_KEY = MAIN_7.DEPOSIT_KEY

这需要很多代码,但为了简单起见,我建议您使用WITH factoring子句作为第一个命令,将您使用的所有表包含在其中,然后作为最终的SELECT,从所有这些CTE获取数据。大概是这样的:

with 
a as (select ... from ...),
b as (select ... from ...),
f as (select ... from ...),
...
select a.col1, b.col2, f.col3
from a join b on a.id = b.id
left join f on f.id = b.id
where ...

我在这里看不到实际的问题陈述。您的查询中的确切问题在哪里?