错误 --> 有人可以(向新手)解释如何在 select 语句内的子查询之外加入吗?

Error --> Can someone explain (to a newbie) how to join outside of a sub-query within a select statement?

代码:

select
 cal.fiscal_week, 
 h.role_type, 
 h.se,
 sub.*
from (
  select
    ds_denali__call_disposition__c as disposition, 
    datepart(hour, dateadd(hour, -5, ds_denali__call_started__c)) as call_time,
    datepart(dw, ds_denali__call_started__c) as day_of_week,
    ds_denali__owner__c as owner
  from homer.sfdc.ds_denali__dialsource_action__c 
  where ds_denali__call_disposition__c in ('No Contact', 'Voicemail', 'Internal', 'Progression - Decs Mkr', 'Progression - Other', 'No Prog - Decs Mkr', 'Decision Positive', 'Decision Negative', 'No Prog - Other')
  and trunc(ds_denali__call_started__c) >= 2018-11-01) sub
left join homer.homer_mapping.insidesales_hierarchy h on ds.ds_denali__owner__c = h.sfdc_id
left join homer.homer_mapping.adp_fiscal_calendar cal on trunc(ds.ds_denali__call_started__c) = cal.day_date

我需要加入所有内容,但是 'homer.sfdc.ds_denali__dialsource_action_c' 是一个怪物 table,所以我试图通过子查询尽可能地减少时间。但我仍然需要将它加入我们拥有的另外两个 table(在左侧加入中列出)。我遇到的 运行 错误是它一直告诉我 'ds.' 不存在。我只是不确定这是否是我不熟悉的基础作品,因为我是自学成才而且很新。任何和所有的帮助表示赞赏。

您似乎不了解别名。我假设列 ds.ds_denali__owner__c 是为了引用子查询中 homer.sfdc.ds_denali__dialsource_action__c table 的列。目前,它正在默认数据库/架构中寻找名为 ds 的 table,因此出现了您看到的错误。

接下来你似乎没有正确理解子查询。当您编写子查询时,您实际上是在创建一个新的 table,然后可以在查询的其他地方使用它。在这种情况下,您创建的 table 是别名(命名)子并且包含 4 列。 (处置,call_time、day_of_week 和所有者)

把这些放在一起[=13​​=]

left join homer.homer_mapping.insidesales_hierarchy h on ds.ds_denali__owner__c = h.sfdc_id

应该变成

left join homer.homer_mapping.insidesales_hierarchy h on sub.owner = h.sfdc_id

并修复

left join homer.homer_mapping.adp_fiscal_calendar cal on trunc(ds.ds_denali__call_started__c) = cal.day_date

您首先需要将 ds_denali__call_started__c 添加到您的子查询。

最后一点,如果您的子查询实际上加快了速度,我会非常惊讶。与直接加入 homer.sfdc.ds_denali__dialsource_action__c

相比,我完全希望它能减慢速度