Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.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
Sql 连接多个查询的输出_Sql_Oracle_Union All - Fatal编程技术网

Sql 连接多个查询的输出

Sql 连接多个查询的输出,sql,oracle,union-all,Sql,Oracle,Union All,我一直在尝试连接两个具有公共字段的查询的输出,我已经查看了人们以前在类似问题和答案中提供的几个示例,但似乎无法让它们为我工作 我有两个查询,第一个查询的输出基本上是账户ID、具体交易类型金额、交易日期,然后第二个查询输出账户ID、账户值 第二个查询有点复杂,因为它必须查找帐户项目id、该项目的最新价格日期、该价格日期的价格,然后将该项目的数量与按帐户id分组的项目的价格相加 因此,第一个查询看起来有点像这样: Select distinct ACCOUNT_NUMBER ,TrANSACTION

我一直在尝试连接两个具有公共字段的查询的输出,我已经查看了人们以前在类似问题和答案中提供的几个示例,但似乎无法让它们为我工作

我有两个查询,第一个查询的输出基本上是账户ID、具体交易类型金额、交易日期,然后第二个查询输出账户ID、账户值

第二个查询有点复杂,因为它必须查找帐户项目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
第二个查询如下所示:

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
我希望查询2中的TOTAL_VALUE列出现在查询1中。如果我将两个查询合并为一个查询,查询将运行很长时间,然后出现内存不足错误。如果我单独运行它们,它们都需要几分钟,但我得到的结果没有任何问题

我确实根据前面的例子做了如下尝试:

SELECT *
FROM (QUERY1) AS Q1
LEFT JOIN (QUERY2) AS Q2
on Q1.A.ACCOUNT_ID = Q2.A.ACCOUNT_ID
当我尝试运行此查询时,出现语法错误,它似乎特别不喜欢查询别名?

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
试一试


那很有效!真不敢相信这么简单,我想我遇到的问题纯粹是Oracle和SMSS/TSQL之间的语法差异?很高兴我走上了正确的道路,但我不确定如果没有你的帮助我是否能到达那里,非常感谢!不客气,with子句可以使事情更容易阅读。别忘了把我的答案标为正确,谢谢那很有效!真不敢相信这么简单,我想我遇到的问题纯粹是Oracle和SMSS/TSQL之间的语法差异?很高兴我走上了正确的道路,但我不确定如果没有你的帮助我是否能到达那里,非常感谢!不客气,with子句可以使事情更容易阅读。别忘了把我的答案标为正确,谢谢