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

SQL中同一字段多字符串值关联数值计算问题求助

解决方案

你的问题出在原查询的CASE语句仅匹配完全等于单个book值的行,而当value列是分号分隔的多个值时,这个条件不成立,导致返回NULL。要实现需求,需要判断每个book是否存在于value字符串中,再累加对应的数值。

修改后的查询语句

WITH CM as (
  SELECT 
    Main.ID as ID,
    -- 累加每个存在的book对应的数值
    (CASE WHEN CONCAT(';', Main.value, ';') LIKE '%;book1;%' THEN 5 ELSE 0 END) +
    (CASE WHEN CONCAT(';', Main.value, ';') LIKE '%;book2;%' THEN 8 ELSE 0 END) +
    (CASE WHEN CONCAT(';', Main.value, ';') LIKE '%;book3;%' THEN 2 ELSE 0 END) AS numb,
    time_m as time_m,
    Main.value
  FROM Main
)
SELECT 
  CM.ID,
  CM.numb,
  CM.time_m,
  CM.numb * CM.time_m as resu,
  CM.value
FROM CM

关键说明

  1. 精确匹配判断:使用CONCAT(';', Main.value, ';')给value两端加上分号,再用LIKE '%;bookX;%'匹配,可以避免类似book11被误判为book1的情况,确保只匹配完整的book名称。
  2. 数值累加:每个CASE语句单独判断对应book是否存在,存在则返回对应数值,否则返回0,最后将这些值相加得到总numb。
  3. 计算结果:用总numb乘以time_m得到最终的resu。

执行结果

执行上述查询后,会得到你期望的结果:

IDnumbtime_mresuvalue
322211520300book1;book2;book3
322221315195book1;book2
32233520100book1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:15:38