尝试在 Big Query 中使用 CTE

问题描述 投票:0回答:1

我知道这不是实现这一目标的最佳方法,但我只是在继续学习的同时尝试一些东西。我使用 CTE 连接两个表,现在我想聚合临时表。

我不断以各种方式收到以下错误,似乎 BQ 告诉我它无法识别第二个语句中的值:

在accounts_Opps [15:22] 中未找到名称帐户

这是查询:

WITH accounts_Opps AS (
  SELECT  Accounts.Id, Accounts.name,  
          Accounts.sales_territory_c, 
          Accounts.cs_stage_c,
          opportunities.account_Id,
          opportunities.name,
          opportunities.rep_projected_arr_c,
          opportunities.stage_name
  FROM `salesforce.account` AS Accounts
  LEFT JOIN `salesforce.opportunity` AS Opportunities
  ON Accounts.id = Opportunities.account_id
  WHERE Opportunities.account_Id IS NOT NULL
)

SELECT accounts_Opps.accounts.name, count(accounts_opps.opportunities.rep_projected_arr_c)
FROM accounts_Opps
GROUP BY accounts_Opps.accounts.name

再说一次,虽然我知道这不是实现这一目标的最佳方法,但我只是在尝试不同的方法,我想知道这种方法是否可行,如果可行,如何实现?

sql google-bigquery
1个回答
0
投票

您正在处理重复的名称,一个来自客户,另一个来自机会,这是不可行的。可以通过分配别名来区分具有相同名称的列。

正如 @shawnt00 的评论中所指出的,来自 CTE 的列是通过其原始名称或 select 语句中分配的别名来识别的。

WITH accounts_Opps AS (
  SELECT  Accounts.Id, 
          Accounts.name as account_name,  
          Accounts.sales_territory_c, 
          Accounts.cs_stage_c,
          opportunities.name as opportunity_name,
          opportunities.rep_projected_arr_c,
          opportunities.stage_name
  FROM `account` AS Accounts
  LEFT JOIN `opportunity` AS opportunities
  ON Accounts.id = opportunities.account_id
  WHERE opportunities.account_Id IS NOT NULL
)

SELECT account_name, count(rep_projected_arr_c)
FROM accounts_Opps
GROUP BY account_name
© www.soinside.com 2019 - 2024. All rights reserved.