Reputation: 137
I've been trying to join the output of two queries that have a common field, I've gone over several examples people have provided in similar questions and answers before but can't seem to get them to work for me.
I have two queries, that basically provided Account_ID, Specific_Transaction_Type_Amount, Transaction_Date as output from the first query, and then second query outputs Account_ID, Account_Value.
The second query is a little complicated as it has to look up a account item id, the most recent price date for that item, the price for that price date, and then sum the quantity of that item, times the price of the item grouped by account id.
So the first query looks somewhat like this:
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'
The second query looks something like this:
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
So I get two results:
ACCOUNT_ID TRANSACTION_AMOUNT TRANSACTION_DATE
_____________________________________________________
123456789 500.23 07/02/2019
ACCOUNT_ID TOTAL_VALUE
____________________________
123456789 24365.48
I'd like the TOTAL_VALUE
column from query 2 to appear in query 1. If I merge the two queries into one, the query runs for a long time before I get a out of memory error. If I run them separately they each take a couple of minutes but I get the results without any problem.
I did try based on earlier examples doing something like:
SELECT *
FROM (QUERY1) AS Q1
LEFT JOIN (QUERY2) AS Q2
on Q1.A.ACCOUNT_ID = Q2.A.ACCOUNT_ID
I get a syntax error when I try to run this query, it specifically doesn't seem to like the query alias?
Upvotes: 0
Views: 37
Reputation: 1612
Try
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
Upvotes: 2