在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 +詹姆斯
答
- 创建table variable与关口UMNS 名称和数量尚未处理最初的项目符号列表
- 的在项目符号列表的处理之前,添加的每一项与规范化名称(FOO,呸,布莱恩,杰夫,...)作为一个单独的战绩进入表变量
- 你得到的结果作为
SELECT Name, SUM(Quantity) FROM @tableVar GROUP BY Name
- 构建请求字符串从上面的结果
随时问,如果有不清楚的地方
答
将分割数字和项目并将它们作为单独列存储在表格中会更好。字符串操作在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('')