在SQL中添加匹配的字符串的数字部分

问题描述:

这很难解释,因此我会尝试和演示,这些都是在MS SQL存储过程中完成的。在SQL中添加匹配的字符串的数字部分

我的记录的列表

  • 10 FOOS
  • 15 FOOS
  • 35 bahs
  • 98 foobahs
  • 10 FOOS
  • 35 FOOS
  • 35个bahs
  • 99 foobahs
  • 99 foobahs
  • 杰夫
  • 布赖恩
  • 杰夫
  • 詹姆斯99分
  • 詹姆斯99个
  • 詹姆斯

我目前的记录转换为脚本:

2X 10 FOOS + 15个FOOS + 3×35 bahs + 98个foobahs + 2X 99foobahs + 2X杰夫+脑+ 2X詹姆斯99 +詹姆斯

我需要它是添加了所有的类似的记录,其中三项方是在字符串的开始的数字值,从而导致

35 FOOS + 105个FOOS + 296个foobahs + 2×杰夫+脑+ 2×詹姆斯99 +詹姆斯

  1. 创建table variable与关口UMNS 名称数量尚未处理最初的项目符号列表
  2. 在项目符号列表的处理之前,添加的每一项与规范化名称(FOO,呸,布莱恩,杰夫,...)作为一个单独的战绩进入表变量
  3. 你得到的结果作为SELECT Name, SUM(Quantity) FROM @tableVar GROUP BY Name
  4. 构建请求字符串从上面的结果

随时问,如果有不清楚的地方

将分割数字和项目并将它们作为单独列存储在表格中会更好。字符串操作在SQL服务器中不好。有了这个说法,你可以尝试以下查询

该查询将值分成数字和项目,然后总结相似的项目,并将它们加入到一个单一的值。非常难看,但希望它可以工作

;WITH items 
AS 
(
     SELECT CAST(
       CASE WHEN PATINDEX('%[^0-9]%',columnName)>1 
        THEN SUBSTRING(columnName,1,PATINDEX('%[^0-9]%',columnName)) 
       ELSE '1' END 
       AS INT) 
      AS Number, 
       CASE WHEN PATINDEX('%[^0-9]%',columnName)>1 
        THEN SUBSTRING(columnName,PATINDEX('%[^0-9]%',columnName),LEN(columnName)) 
       ELSE columnName END 
      AS Item 
     FROM theTable 

) 
SELECT CAST(SUM(Number) AS VARCHAR(10)) + ' ' + item + ' +' AS 'text()' 
FROM items 
GROUP BY item 
FOR XML Path('')