首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在此查询中使用with语句?

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

Stack Overflow用户
提问于 2019-11-04 16:38:21
回答 1查看 29关注 0票数 0

在这个查询中,我想使用with-statement。我有一个计算A union all B的子查询,我想将它与-statement一起使用。但是当我使用with-statement时,我会遇到这样的错误:“表或视图不存在”。令我惊讶的是,当我将第一部分替换为-statement时,它可以正常工作。但是当我替换第二部分时,我会遇到这个错误!!

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-11-04 16:41:58

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

代码语言:javascript
复制
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 ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58689719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档