sql查询计算重复项

Aff*_*fan 5 sql t-sql sql-server sql-server-2008

我得到一个结果:

Code    Declaration 
123     a1 - 2nos
123     a2 - 230nos
123     a3 - 5nos
123     a1 - 100nos
123     a3 - 6nos
Run Code Online (Sandbox Code Playgroud)

是否可以对重复项求和,我需要输出显示如下:

Code    Declaration
123     a1 - 102nos
123     a2 - 230nos
123     a3 - 11nos
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 4

我的回答基于您发布的上一个问题。下面是一个 CTE 版本,它将拆分数据并对声明进行总计:

;with cte (code, DeclarationItem, Declaration) as
(
  select Code,
    cast(left(Declaration, charindex(',',Declaration+',')-1) as varchar(50)) DeclarationItem,
         stuff(Declaration, 1, charindex(',',Declaration+','), '') Declaration
  from yourtable
  union all
  select code,
    cast(left(Declaration, charindex(',',Declaration+',')-1) as varchar(50)) DeclarationItem,
    stuff(Declaration, 1, charindex(',',Declaration+','), '') Declaration
  from cte
  where Declaration > ''
),
s2 as
(
  select code, 
    ltrim(rtrim(left(declarationitem, charindex('-', declarationitem)-1))) col1
    , reverse(left(reverse(declarationitem), charindex('-', reverse(declarationitem))-1)) col2
  from cte
),
fnl as
(
  select code, col1,
    left(col2, patindex('%[Aa-Zz]%', col2)-1) value,
    substring(col2, patindex('%[Aa-Zz]%', col2), len(col2)) str
  from s2
) 
select code, col1 +' - '+ cast(sum(cast(value as int)) as varchar(50)) + str as declarationitem
from fnl
group by code, col1, str
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle 演示

结果是:

| CODE | DECLARATIONITEM |
--------------------------
|  123 | 123 a1 - 102nos |
|  123 | 123 a2 - 230nos |
|  123 |  123 a3 - 11nos |
Run Code Online (Sandbox Code Playgroud)