我正在try 将下面的两个表连接到多个列上(通过DBT云进行 bigquery ).

t1 as

id 2021_code 2022_code 2023_code
P 1
Q 2 3
R 4 5 6

t2 as

code label
1 A
2 B
3 C
4 D
5 E
6 F

对于T1中最后三列中的每个非空值,我希望在连接表中有一个具有唯一标签的不同行.

我期待着下面的联排餐桌.

id code label
P 1 A
Q 2 B
Q 3 C
R 4 D
R 5 E
R 6 F

我try 了以下代码,但可以理解的是失败了.

select id, code, label from t1 left join t2 on 2021_code = code or 2022_code = code or 2023_code = code

我的加入条件或方法显然需要修改.将感谢您提供的任何意见.

推荐答案

您可以重新创建T1以生成1个代码列,然后连接

SELECT
  t1.id, t1.code,t2.label
FROM (
  SELECT id, 2021_code AS code FROM t1 WHERE 2021_code IS NOT NULL
  UNION ALL
  SELECT id, 2022_code AS code FROM t1 WHERE 2022_code IS NOT NULL
  UNION ALL
  SELECT id, 2023_code AS code FROM t1 WHERE 2023_code IS NOT NULL
) t1
JOIN t2 ON t1.code = t2.code

Sql相关问答推荐

在数据分区内执行确定

使用来自不同深度的嵌套组的值执行计算的干净方法?

基于多个字段删除Access中的重复记录,同时保留最低优先级

SQL Oracle条件分组依据

如何根据特定的内部json元素值过滤postgres查询结果?

每组显示一行(表1中的分组值),表2中的不同列表用逗号分隔

如果元素包含通过SQL指定的字符串,则过滤掉数组元素

具有多个条件的SQL否定

在SQL GROUP BY中的某些行之后执行计算

在xml.Modify方法中使用子字符串和可能的替代方法

如何在AWS Athena中 Select JSON数组的最后一个元素?

使用与JOIN一起使用的查询后进行分页和排序

在Oracle SQL中按月生成日期

如何使用聚合连接两个表

为什么SQL in中的空子查询有时被视为null

两个具有 NULL 值的表达式结果之间的差异

SQL ORACLE - 查找连续天数

如何获取每个组中最近的n条记录并将它们聚合成数组

SQL 函数 DIFFERENCE 返回有趣的分数

聚合 Athena 中的列