连接多个查询的输出
Joining output of multiple queries
我一直在尝试加入两个具有公共字段的查询的输出,我已经查看了人们之前在类似问题和答案中提供的几个示例,但似乎无法让它们工作我.
我有两个查询,基本上提供 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 中。如果我将两个查询合并为一个,查询 运行s 很长一段时间才能得到一个内存不足错误。如果我 运行 他们分开,他们每个人都需要几分钟,但我得到的结果没有任何问题。
我确实尝试根据前面的例子做了类似的事情:
SELECT *
FROM (QUERY1) AS Q1
LEFT JOIN (QUERY2) AS Q2
on Q1.A.ACCOUNT_ID = Q2.A.ACCOUNT_ID
当我尝试 运行 这个查询时出现语法错误,它似乎特别不喜欢查询别名?
尝试
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
我一直在尝试加入两个具有公共字段的查询的输出,我已经查看了人们之前在类似问题和答案中提供的几个示例,但似乎无法让它们工作我.
我有两个查询,基本上提供 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 中。如果我将两个查询合并为一个,查询 运行s 很长一段时间才能得到一个内存不足错误。如果我 运行 他们分开,他们每个人都需要几分钟,但我得到的结果没有任何问题。
我确实尝试根据前面的例子做了类似的事情:
SELECT *
FROM (QUERY1) AS Q1
LEFT JOIN (QUERY2) AS Q2
on Q1.A.ACCOUNT_ID = Q2.A.ACCOUNT_ID
当我尝试 运行 这个查询时出现语法错误,它似乎特别不喜欢查询别名?
尝试
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