【发布时间】:2020-07-27 18:41:20
【问题描述】:
我正在尝试在 BigQuery 中编写一个动态条件语句,以根据特定条件动态连接表。单个 ID 可以有 1 个或多个条件。 如何动态地“过滤”一系列 ID 条件(使用表 1、2 和 3)以将一组 masterProductIds 放入我的 Final 表中?
表 1 - Identification_table
表 2 - 归档表
表 3 - 价格
在这种情况下,我们需要为 Id 1 评估 3 个条件,为 Id 2 评估 2 个条件,为 Id 3 评估 1 个条件。
在我们也有价格条件的情况下,它应该加入价格表并根据表1中的运算符和值进行过滤。至于产品条件,我不必加入任何表,我只是按照表 1 中的值取值。
我期望的最终结果集。
决赛桌
到目前为止我做了什么:
select masterProductId, row_number() over (partition by id ) sq
from `filing_table` p
left join `identification_table` pc
on case when subject = 'brand' then p.brandName when subject='category' then categoryName end = pc.boundaryValue
--on p.brandName = pc.boundaryValue or p.categoryName = boundaryValue
left join `price` pp
on p.code = pp.code
where 1=1
and pc.code = 'Id 2'
--and pp.RRP < safe_cast(pc1.boundaryValue as float64)
这将对所有内容进行整体评估。我不知道如何逐组评估 ID。
【问题讨论】:
-
非常有趣的“挑战” - 您是否灵活地应对设置中的一些更改 - 1) 更改 Table2 中的列名,以便它们匹配 Table1 中列主题的值 2) 将 Table1 运算符列的值替换为相应的BigQuery 运算符 - 像
=而不是is equal;<而不是less than等? -
我无法更改表 2 中的列名以匹配表 1 中的主题值 2.) 可以灵活地替换运算符的值,但最好在临时表或临时表中
-
所以,在这种情况下,您可以更改主题列的值以匹配 table2 的列名 - 对吧?然后所有
preferably in a temp or staging table都可以处理,因为它不是您问题的重点——同意吗?您/我们需要在这里专注于主要挑战,其他一切留待以后调整/调整等。同时,请查看How to create a Minimal, Reproducible Example -
是的,你的假设是正确的,这听起来像是一个计划
标签: sql join google-bigquery coalesce