繁体   English   中英

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

[英]Adding up the numeric parts of a matched string in SQL

这很难解释,所以我将尝试演示,这些都是在MS SQL存储过程中完成的。

我有一个记录清单

  • 10个foos
  • 15个
  • 35铢
  • 98 foobahs
  • 10个foos
  • 35个
  • 35铢
  • 99 foobahs
  • 99 foobahs
  • 杰夫
  • 布赖恩
  • 杰夫
  • 詹姆斯99
  • 詹姆斯99
  • 詹姆士

我有一个脚本,该脚本当前将记录转换为:

2x 10个foos + 15个foos + 3x 35 bahs + 98 foobahs + 2x 99foobahs + 2x Geoff + Brain + 2x James 99 + James

我需要做的是将所有相似的记录加起来,其中ree是字符串开头的数值,导致

35个foos + 105个foos + 296个foobahs + 2个Geoff + Brain + 2个James 99 + James

  1. 在处理初始项目符号列表之前 ,创建一个具有“ 名称”和“ 数量”列的表变量
  2. 在处理项目符号列表的过程中,将具有标准化名称(foo,bah,brian,geoff等)的每个项目作为单独的记录添加到表变量中
  3. 您得到的结果为SELECT Name, SUM(Quantity) FROM @tableVar GROUP BY Name
  4. 根据以上结果构建请求的字符串

随时问是否有不清楚的地方

最好拆分数字和项目,然后将它们存储在表中作为单独的列。 在SQL Server中,字符串操作不好。 话虽如此,您可以尝试以下查询

此查询将值分为数字和项目,然后将相似的项目求和并将它们合并为单个值。 很难看,但希望能用

;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('')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM