gpt4 book ai didi

sql - 如何根据条件加入不同的字段

转载 作者:行者123 更新时间:2023-11-29 14:30:06 36 4
gpt4 key购买 nike

我需要在查询中连接两个表 door_ctrlr_factequip_store_dim

select * from door_ctrlr_fact d
join equip_store_dim e
on d.door_id = e.tech_nbr

有一小部分数据带有特殊的door_id,例如WM1-1003-072。此字符串中的第三个字段有前导零,需要在加入之前将其删除。所以对这个数据子集的查询是:

select * from door_ctrlr_fact d
join equip_store_dim e
on split_part(d.door_id, '-', 1) = split_part(e.tech_nbr, '-', 1)
and split_part(d.door_id, '-', 2) = split_part(e.tech_nbr, '-', 2)
and trim(leading '0' from split_part(e.door_id, '-', 3)) = trim(leading '0' from split_part(e.tech_nbr, '-', 3))
where door_id like 'WM%'

为了处理所有情况,我可以根据 door_id 的样子联合两个查询。

例如,在表 door_ctrlr_fact 中:

door_id       cycle_cnt
A10003 500
WM4-103-070 1000
B200384 2000

在表 equip_store_dim

tech_nbr       store_id
A10003 S001
WM4-103-70 S002
B200384 S004

加入后,结果应该是:

door_id      cycle_cnt       store_id
A10004 500 S001
WM4-103-70 1000 S002
B200384 2000 S004

我想知道是否有更好的方法来做到这一点。我可以只使用一个查询并根据 door_id

的不同格式加入不同的字段吗

最佳答案

我使用 REGEXP_REPLACE 函数修改连接中的 door_id,我在正则表达式中使用组来仅匹配第二个连字符后的“-0”组合

SELECT door_id, cycle_cnt, store_id
FROM door_ctrlr_fact
JOIN equip_store_dim ON tech_nbr = REGEXP_REPLACE(door_id, '(.*-.*)(-0)(.*)', '\1-\3')

关于sql - 如何根据条件加入不同的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53157813/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com