return 基于 case when 语句的字符串

return a string based on a case when statement

所以我有两个 tables

我想知道是否有人可以提供帮助。所以在我的主要 table 中,我有不同格式的字符串。

Mac 地址正在填充为电表,但它们仍然链接在另一个 table。

在 bigquery 中清理此数据以恢复 mac 地址的所需结果的最佳方法是什么?

到目前为止,我已经尝试过了,但我没有得到任何结果,而且我仍然得到 mac 地址,回到仪表应该在的地方? 左连接 table 的问题是我也在尝试 return MAP ID,只要仪表和 L_meter 也连接在一起。

SELECT DISTINCT
    COALESCE(table2.L_METER,METER) AS METER,
    MAP.map_id AS Map,

FROM `table1 ` AS A
LEFT JOIN `table2` AS MAP ON METER = L_METER
                            AND METER = MAP.mac_address

主要Table

METER
G4F00113102000
904DC300000RE122
904DC3000001E131
G4F00191402000
G4F00610542000

左联接table

L_METER mac_address MAP
E6S15544342061 904DC3000001E131 SSL
G4F00111072000 904DC300000RE122 SMP
G4F00113102000 904DC3000001T133 SMP
G4F00191402000 904DC3000001Y144 SMP
G4F00610542000 904DC3000001U55 SMP

期望的结果

METER
G4F00113102000
G4F00111072000
E6S15544342061
G4F00191402000
G4F00610542000

您可以将 COALOESCE() 与左连接一起使用。如果 table1.METER=table2.mac_address 则选择 L_METER 否则 L_METER 将为 NULL 并且将选择 METER

架构和插入语句:

 create table table1 (METER varchar(20));
 insert into table1 values('G4F00113102000');
 insert into table1 values('904DC300000RE122');
 insert into table1 values('904DC3000001E131');
 insert into table1 values('G4F00191402000');
 insert into table1 values('G4F00610542000');
 
 
 create table table2(L_METER    varchar(20),mac_address varchar(20));
 insert into table2 values('E6S15544342061','904DC3000001E131');
 insert into table2 values('G4F00111072000','904DC300000RE122');
 insert into table2 values('G4F00113102000','904DC3000001T133');
 insert into table2 values('G4F00191402000','904DC3000001Y144');
 insert into table2 values('G4F00610542000','904DC3000001U55');

查询:

 select coalesce(table2.L_METER,METER) METER
 from table1 left join table2
 ON table1.METER=table2.mac_address

输出:

METER
G4F00113102000
G4F00111072000
E6S15544342061
G4F00191402000
G4F00610542000

db<>fiddle here