SQL Server 在SQL中将同一字段中的多个字符串值相乘

djmepvbi  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(176)

我需要有关查询的帮助,以计算在同一列中选择多个值的时间。
这是主表:
| 识别码|价值观|时间_m|
| - -|- -|- -|
| 小行星32221|第一册;第二册;第三册|二十个|
| 小行星32222|第一册;第二册|十五|
| 小行星32233|第一册|二十个|
我的疑问:

WITH CM as (
 
SELECT
    Main.ID as ID,
    case 
       when Main.value= 'book1' then 5
       when Main.value= 'book2' then 8
       when Main.value= 'book3' then 2
       else null 
    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

我得到的:
| 识别码|号码|时间_m|雷苏|
| - -|- -|- -|- -|
| 小行星32221|空值|二十个|空值|
| 小行星32222|空值|十五|空值|
| 小行星32233|五个|二十个|100个|
我所需要的与此类似:
| 识别码|号码|时间_m|雷苏|
| - -|- -|- -|- -|
| 小行星32221|十五|二十个|三百|
| 小行星32222|十三|十五|一百九十五|
| 小行星32233|五个|二十个|100个|
我怎么能那样做呢?

tp5buhyn

tp5buhyn1#

如果您可以使用SQL Server 2016+,只需使用STRING_SPLIT()拆分存储的值,将值Map到适当的权重并计算结果:

SELECT m.ID, a.numb, m.time_m, (a.numb * m.time_m) AS resu
FROM main m
CROSS APPLY (
   SELECT SUM(v.numb)
   FROM STRING_SPLIT(m.[value], ';') s
   JOIN (VALUES 
            ('book1', 5), 
            ('book2', 8), 
            ('book3', 2)
         ) v ([value], numb) ON s.[value] = v.[value]
) a (numb)

相关问题