2015-09-07 51 views
-1

我想加入从子查询到主要的一些领域,并希望知道如何编写连接,以便我避免在子查询中重新定义我的主表。SQL显式语法子查询加入

我需要限制从子查询的结果,如果它是持有人或条件(aXM.ATTRIB_03),这就是为什么我试图通过子查询连接。计划是根据条件sub中返回的条件来汇总条件,参见提议的输出。

虽然没有在代码片段中显示,但在每个子查询中返回多个结果也很重要。

我一直在尝试用下面的查询,这个问题是,子查询不知道的别名“Ass

(ORA-00904:“ASS”,“ROW_ID”:无效的标识符)

SELECT 
    Ass.NAME AS REGISTER_NAME, 
    Ass.ASSET_NUM AS SMSF_NUM, 
    HOLDER.SMSF_HOLDER_TYPE, 
    CONDITION.xCONDITION 

FROM 
    siebel.s_asset Ass 

    LEFT JOIN 
    (
    SELECT aXM.par_row_id AS hCon, aXM.ATTRIB_44 AS SMSF_HOLDER_TYPE 
    FROM Siebel.S_ASSET_XM aXM 
    WHERE Ass.row_id = aXM.par_row_id 
     AND aXM.ATTRIB_03 IS NULL 
) HOLDER 
    ON Ass.row_id = HOLDER.hCon 

    LEFT JOIN 
    (
    SELECT aXM.par_row_id AS cCon, aXM.ATTRIB_44 AS xCONDITION 
    FROM Siebel.S_ASSET_XM aXM 
    WHERE Ass.row_id = aXM.par_row_id 
     AND aXM.ATTRIB_03 = 'Condition' 
) CONDITION 
    ON Ass.row_id = CONDITION.cCon 

WHERE 
    AND Ass.NAME = 'SMSF Auditor' 
    AND Ass.STATUS_CD = 'Registered' 

所需的输出

REGISTER_NAME SMSF_NUM SMSF_HOLDER_TYPE  SMSF_CONDITION 
SMSF Auditor 100259612 Individual Auditor  Condition 1~ Condition 2~ Condition 3 
SMSF Auditor 100259747 Individual Auditor  Condition 1~ Condition 2~ Condition 3 
SMSF Auditor 100259907 Individual Auditor  Condition 1~ Condition 2~ Condition 3 
+0

你的代码是非常令人费解。请描述你的实际任务,提供一些样本数据和期望的结果。 –

+0

我很抱歉,这段代码片段是一个较大的更复杂的查询的一部分,我试图尽可能简化。我将继续根据人们的反馈进行更新,以帮助人们了解我所要求的内容 –

+0

您未包含示例数据。所以我们没有任何工作来创造你的愿望输出。 –

回答

0

ÿ您不能在内部查询中使用ASS别名。

试试这个。看起来像是一样。

SELECT 
    Ass.NAME AS REGISTER_NAME, 
    Ass.ASSET_NUM AS SMSF_NUM, 
    CASE 
    WHEN aXM.ATTRIB_44 IS NULL THEN NULL 
    END AS SMSF_HOLDER_TYPE, 
    CASE 
    WHEN aXM.ATTRIB_44 IS NULL THEN NULL 
    ELSE aXM.ATTRIB_44 
    END AS xCONDITION 
FROM 
    siebel.s_asset Ass 
    LEFT JOIN Siebel.S_ASSET_XM aXM 
    on Ass.row_id = aXM.par_row_id 
WHERE 
     Ass.NAME = 'SMSF Auditor' 
    AND Ass.STATUS_CD = 'Registered' 
    AND (aXM.ATTRIB_03 IS NULL OR aXM.ATTRIB_03 = 'Condition') 
+0

是的,确实可行,但问题在于,由于不同的原因加入Siebel.S_ASSET_XM aXM时,我需要限制结果。例如, 。 S_ASSET_XM包含条件和能力结果。我想要一个只返回条件的子查询和另一个只返回能力结果的子查询 –

+0

那么你应该在你的问题中包含它。对不起,我只能解决我看到的问题。 –

+0

您有权利更新代码 –

0

你可以重写查询像这样

SELECT 
    Ass.NAME AS REGISTER_NAME, 
    Ass.ASSET_NUM AS SMSF_NUM, 
    HOLDER.SMSF_HOLDER_TYPE 

FROM 
    siebel.s_asset Ass 
    left join Siebel.S_ASSET_XM HOLDER on Ass.Ass.row_id = HOLDER.par_row_id 
    inner join Siebel.S_ASSET_XM aXM ON Ass.row_id = aXM.par_row_id