多个查询的加盟输出

问题描述 投票:0回答:1

我一直在想加入有一个共同的领域两个查询的输出,我已经超过人在类似的问题和答案提供过,但似乎无法让他们为我工作的几个例子。

我有两个查询,基本上提供ACCOUNT_ID,Specific_Transaction_Type_Amount,TRANSACTION_DATE作为来自第一查询输出,然后第二查询输出ACCOUNT_ID,Account_Value。

第二个查询是有点复杂,因为它要查找一个帐户项目ID,最近的价格日期该项目的价格为价格的日期,然后总结该项目的数量,乘以项目的价格进行分组通过帐户ID。

所以第一个查询看起来有点像这样:

Select distinct
ACCOUNT_NUMBER
,TrANSACTION_AMOUNT
,TRANSACTION_DATE
from CLIENT CL
left join
CLIENT_ACCOUNT_LINK CAL on CL.CLIENT_ID = CAL.CAL_CLIENT_ID
left join
ACCOUNT A on CAL.CAL_ACCOUNT_ID = A.ACCOUNT_ID
left join
ACCOUNT_TYPE AT on A.ACCOUNT_TYPE_ID = AT.ACCOUNT_TYPE_ID
left join
ACCOUNT_TRANSACTION ATR on A.ACCOUNT_ID = ATR.ACCOUNT_ID
WHERE 
AT.ACCOUNT_TYPE = 'ACCOUNTYPE2'
AND ATR.TRANSACTION_TYPE = 'TRANSACTIONTYPE6'

第二个查询看起来是这样的:

select distinct
A.ACCOUNT_NUMBER
,SUM(AB.ITEM_QTY * PR.ITEM_PRICE) OVER (PARTITION BY A.ACCOUNT_ID) as                     TotalValue
from ACCOUNT A 
join ACCOUNT_BALANCE AB on A.ACCOUNT_ID = AB.ACCOUNT_ID
join ITEM_LIST IL on AB.ITEM_ID = IL.ITEM_ID
join PRICE_DATE PD on IL.ITEM_ID= PD.ITEM_ID
join CODE_LOOKUP cODE on PD.PRICE_STATUS_CODE = CODE.CODE_ID AND CODE.DESCRIPTION = 'ACTIVE'
AND PD.PRICE_DATE = (SELECT MAX(PD2.PRICE_DATE)
FROM PRICE_DATE PD2
WHERE PD2.ITEM_ID = PD.ITEM_ID
AND PD2.PRICE_STATUS_CODE = CODE.CODE_ID
AND sprcp.prcp_effective_date < sysdate + 1)
join PRICE PR on PD.PRICE_ID = PRICE_PRICE_DATE_ID
join PRICE_TYPE PT on PR.PRICE_TYPE_ID = PT.PRICE_TYPE_ID

所以,我得到两个结果:

ACCOUNT_ID    TRANSACTION_AMOUNT    TRANSACTION_DATE
_____________________________________________________
123456789      500.23                 07/02/2019

ACCOUNT_ID    TOTAL_VALUE
____________________________
123456789      24365.48

我想从查询2 TOTAL_VALUE栏出现在查询1.如果我这两个查询合并成一个,查询时间长用完之前,我收到了内存不足的错误。如果我单独运行他们,他们每个需要几分钟,但我得到没有任何问题的结果。

基于前面的例子做这样的事情我也尝试:

SELECT *
FROM (QUERY1) AS Q1
LEFT JOIN (QUERY2) AS Q2
on Q1.A.ACCOUNT_ID = Q2.A.ACCOUNT_ID

我得到一个语法错误,当我尝试运行此查询,它专门似乎并不想查询的别名?

sql oracle union-all
1个回答
2
投票

尝试

with 
q2 (select distinct
            A.ACCOUNT_NUMBER
            ,SUM(AB.ITEM_QTY * PR.ITEM_PRICE) OVER (PARTITION BY A.ACCOUNT_ID) as                     TotalValue
            from ACCOUNT A 
            join ACCOUNT_BALANCE AB on A.ACCOUNT_ID = AB.ACCOUNT_ID
            join ITEM_LIST IL on AB.ITEM_ID = IL.ITEM_ID
            join PRICE_DATE PD on IL.ITEM_ID= PD.ITEM_ID
            join CODE_LOOKUP cODE on PD.PRICE_STATUS_CODE = CODE.CODE_ID AND CODE.DESCRIPTION = 'ACTIVE'
            AND PD.PRICE_DATE = (SELECT MAX(PD2.PRICE_DATE)
            FROM PRICE_DATE PD2
            WHERE PD2.ITEM_ID = PD.ITEM_ID
            AND PD2.PRICE_STATUS_CODE = CODE.CODE_ID
            AND sprcp.prcp_effective_date < sysdate + 1)
            join PRICE PR on PD.PRICE_ID = PRICE_PRICE_DATE_ID
            join PRICE_TYPE PT on PR.PRICE_TYPE_ID = PT.PRICE_TYPE_ID),
    q1 as (Select distinct
                ACCOUNT_NUMBER
                ,TrANSACTION_AMOUNT
                ,TRANSACTION_DATE
                from CLIENT CL
                left join
                CLIENT_ACCOUNT_LINK CAL on CL.CLIENT_ID = CAL.CAL_CLIENT_ID
                left join
                ACCOUNT A on CAL.CAL_ACCOUNT_ID = A.ACCOUNT_ID
                left join
                ACCOUNT_TYPE AT on A.ACCOUNT_TYPE_ID = AT.ACCOUNT_TYPE_ID
                left join
                ACCOUNT_TRANSACTION ATR on A.ACCOUNT_ID = ATR.ACCOUNT_ID
                WHERE 
                AT.ACCOUNT_TYPE = 'ACCOUNTYPE2'
                AND ATR.TRANSACTION_TYPE = 'TRANSACTIONTYPE6')
        select * from q1
          join q2  on q1.account_number = q2.account_number
© www.soinside.com 2019 - 2024. All rights reserved.