为不同门店追加对应配送路线ID的SQL条件语句编写咨询
不同门店追加对应配送路线ID的SQL条件语句编写咨询
嘿,我来帮你搞定这个需求!你现在需要给每个门店自动匹配对应的配送路线ID,然后把它拼接到门店编号后面对吧?其实用SQL里的CASE语句就能轻松实现,它就像我们平时写的多分支if-else逻辑,刚好适配你这8个固定门店的场景。
给你改好的SQL示例,你只需要把剩下的门店-路线对应关系补充进去就行:
SELECT id as shipment_id, purchase_order, -- 根据不同门店匹配路线ID并拼接 CONCAT(ship_to, '-', CASE ship_to WHEN '4552' THEN 'D1' WHEN '4860' THEN 'D2' -- 在这里继续添加其他门店的对应规则,比如 -- WHEN 'XXX' THEN 'D3' -- ... 剩下6个门店依次补充 ELSE '' -- 如果遇到未匹配的门店,可以留空或者设置默认值 END ) AS ship_to_with_route, created_at, ship_on FROM `table1-production.warehouser_.fulfillment_orders` WHERE reservation_id = 1730 ORDER BY created_at asc
如果以后门店数量变多或者路线经常调整,我更推荐你建一个门店-路线映射表(比如叫store_route_mapping),表里只需要存store_id和route_id两列,然后通过关联查询来实现,这样后续维护起来更方便,不用每次改主SQL:
SELECT fo.id as shipment_id, fo.purchase_order, CONCAT(fo.ship_to, '-', srm.route_id) AS ship_to_with_route, fo.created_at, fo.ship_on FROM `table1-production.warehouser_.fulfillment_orders` fo -- 左关联映射表,确保即使没有匹配路线的门店也能正常返回 LEFT JOIN store_route_mapping srm ON fo.ship_to = srm.store_id WHERE fo.reservation_id = 1730 ORDER BY fo.created_at asc
这样不管是现在的8个门店,还是以后新增门店,只要在映射表里维护数据就行,非常灵活~
备注:内容来源于stack exchange,提问作者Cesar Mendoza
相关产品推荐
相关产品推荐

