You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL临时表INSERT语句中结合LIKE子查询赋值?求更佳方案

解决思路与实现方案

你原来的代码存在问题:VALUES子句里的子查询如果匹配到多条routing_path记录,会直接抛出「子查询返回的值不止一个」的错误——因为VALUES里每个条目只能对应单行数据,无法处理多行结果。

正确实现方式

要同时插入静态映射行和满足LIKE条件的动态行,用UNION ALL把两部分数据合并后插入即可:

INSERT INTO #new_cohort
(chosen_path, abr_cohort)
-- 静态映射行
SELECT 'core', 'core'
UNION ALL
SELECT 'pod', 'core'
UNION ALL
SELECT 'Dynamic High - CORE', 'Core_High'
UNION ALL
SELECT 'Dynamic High - POD', 'Core_High'
-- 满足条件的动态行
SELECT routing_path, 'vbc'
FROM [bid].[propensity_path_cutoffs]
WHERE routing_path LIKE '%vbc%'
  AND routing_path NOT LIKE '%Dynamic High%';

更优实现方案

方案1:分离静态映射规则(提升可维护性)

如果后续映射规则可能变动,把静态映射规则单独存为表变量,再和动态查询结果合并插入,可读性和可维护性更强:

-- 定义静态映射规则
DECLARE @static_mappings TABLE (chosen_path VARCHAR(100), abr_cohort VARCHAR(100));
INSERT INTO @static_mappings
VALUES
('core', 'core'),
('pod', 'core'),
('Dynamic High - CORE', 'Core_High'),
('Dynamic High - POD','Core_High');

-- 合并静态规则和动态数据插入
INSERT INTO #new_cohort
(chosen_path, abr_cohort)
SELECT chosen_path, abr_cohort FROM @static_mappings
UNION ALL
SELECT routing_path, 'vbc'
FROM [bid].[propensity_path_cutoffs]
WHERE routing_path LIKE '%vbc%'
  AND routing_path NOT LIKE '%Dynamic High%';

方案2:全表统一映射(适合批量处理场景)

如果需要对propensity_path_cutoffs表的所有数据做统一映射,用CASE WHEN直接生成结果会更高效:

INSERT INTO #new_cohort
(chosen_path, abr_cohort)
SELECT
    routing_path AS chosen_path,
    CASE
        WHEN routing_path IN ('core', 'pod') THEN 'core'
        WHEN routing_path LIKE '%Dynamic High%' THEN 'Core_High'
        WHEN routing_path LIKE '%vbc%' AND routing_path NOT LIKE '%Dynamic High%' THEN 'vbc'
        ELSE '其他' -- 可自定义未匹配数据的映射值
    END AS abr_cohort
FROM [bid].[propensity_path_cutoffs];

内容的提问来源于stack exchange,提问作者ATMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:10:30