我知道这不是实现这一目标的最佳方法,但我只是在继续学习的同时尝试一些东西。我使用 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
再说一次,虽然我知道这不是实现这一目标的最佳方法,但我只是在尝试不同的方法,我想知道这种方法是否可行,如果可行,如何实现?
您正在处理重复的名称,一个来自客户,另一个来自机会,这是不可行的。可以通过分配别名来区分具有相同名称的列。
正如 @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