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
所以我有两个 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