2016-12-08 103 views
0

我有3个snipets的代码。 我想要的是加入2个表格。我考虑过这样的加入。加入2个别名表

with CH_AL_SDB as 
(
    select sr13.*, sr14.* 
    from sr13, sr14 
    where sr14.SUBS_KEY = sr13.S_CTN_MAIN 
)select * from CH_AL_SDB; 

这里我从一张表中选择。

with sr13 as 
(
    select distinct CTN_MAIN, SUBS_KEY, BAN_KEY, count(CTN_MAIN) as CTN_QUANTITY 
    from ETL1_ETL.STG_SDB_LOAD SDB 
    group by CTN_MAIN, SUBS_KEY, BAN_KEY 
)select * from sr13; 

这里从第二张表。

with sr14 as 
(
    select FPCN.* 
    from FCT_PREP_CHARGES_N FPCN 
    where FPCN.business_service_key = 33006 
    and CHARGE_TYPE='R' 
)select * from sr14; 

别名是没有必要的。这是我到目前为止唯一能够提出的事情。执行后有39列,问题是sr14。 sr13有4.结果中应该有43个,但有35个。当我选择所有3个查询并在sql开发者中运行它们时。来自sr13的列根本不出现。还有4列sr14失踪。 sr13和sr14缺失的柱面名称不同。

在的SQLDeveloper顺序是

CH_AL_SDB 
sr13 
sr14 

当我把它更改为

CH_AL_SDB 
sr14 
sr13 

只有4列从SR13出现。

回答

0

这是我如何解决这个

with CH_AL_SDB as 
(
    select distinct SDB.CTN_MAIN as S_CTN_MAIN, 
     SDB.SUBS_KEY as S_SUBS_KEY, 
     SDB.BAN_KEY as S_BAN_KEY, 
     count(SDB.CTN_MAIN) as CTN_QUANTITY, 
     FPCN.BAN_KEY 
    from STG_SDB_LOAD SDB 
    inner join FCT_PREP_CHARGES_N FPCN 
    on FPCN.SUBS_KEY = SDB.CTN_MAIN 
    group by CTN_MAIN, 
     SDB.SUBS_KEY, 
     SDB.BAN_KEY, 
     FPCN.BAN_KEY 
)select * from CH_AL_SDB; 

在组由我添加只是FPCN.BAN_KEY,使其短,但我需要列出所有该死的领域。

更新

这里是一个更好的办法

with sr13 as 
(
    select distinct CTN_MAIN, SUBS_KEY, BAN_KEY, count(CTN_MAIN) as CTN_QUANTITY 
    from ETL1_ETL.STG_SDB_LOAD SDB 
    group by CTN_MAIN, SUBS_KEY, BAN_KEY 
), 
sr14 as 
(
    select FPCN.* 
    from FCT_PREP_CHARGES_N FPCN 
    where FPCN.business_service_key = 33006 
    and CHARGE_TYPE='R' 
) 
    select sr13.*, sr14.* 
    from sr13, sr14 
    where sr14.SUBS_KEY = sr13.S_CTN_MAIN