Sql server 基于字符串获取唯一记录

Sql server 基于字符串获取唯一记录,sql-server,sql-server-2017,Sql Server,Sql Server 2017,我有一张表,上面有如下记录 表: ID Name Value 1 xxx AA 10 2 yyy B 20 3 AA zzz 11 4 xxx B 20 5 kkk C 30 6 qqq (AA) ZZ 10 7 AA 10 我希望获得

我有一张表,上面有如下记录

表:

ID      Name            Value
1       xxx AA           10
2       yyy B            20
3       AA zzz           11
4       xxx B            20
5       kkk C            30
6       qqq (AA) ZZ      10 
7        AA              10
我希望获得常见记录并添加这些记录的值。 预期输出表为:

制定

ID      Name    Value
1       AA        41
2       B         40
3       C         30 
以上只是一些记录的例子。但是,该表有100多条记录,有可能, 将来,将动态添加记录。 注意:我很好,如果它拾取重复的子字符串,并将其作为单个记录读取

我怎样才能做到这一点

编辑:

SELECT SUBSTRING(name, CHARINDEX(' ', name) +1, 20), SUM(Value)
from table
group by SUBSTRING(name, CHARINDEX(' ', name) +1, 20)
试试这个

select SUBSTRING(Name, CHARINDEX(' ', Name),3) AS region, SUM(value) as Value 
from example
group by (SUBSTRING(Name, CHARINDEX(' ', Name),3))
第一列实际上是一个序列号

请尝试以下操作:

-- sample data
declare @tbl table (ID int, Name varchar(10), Value int);
insert into @tbl values
(1, 'xxx AA', 10),
(2, 'yyy B', 20),
(3, 'zzz AA', 11),
(4, 'xxx B', 20),
(5, 'kkk C', 30);
-- select query
select row_number() over (order by NewName) ID,
       NewName, 
       sum(Value) 
from (
    select substring(Name, charindex(' ', Name) + 1, len(Name)) NewName,
           Value
    from @tbl
) a group by NewName

我将如何使用
东西

WITH VTE AS(
    SELECT *
    FROM (VALUES(1,'xxx AA',10),
                (2,'yyy B',20),
                (3,'zzz AA',11),
                (4,'xxx B',20),
                (5,'kkk C',30)) V(ID,[Name],[Value]))
SELECT ROW_NUMBER() OVER (ORDER BY N.R) AS ID,
       N.R AS [Name],
       SUM([Value]) AS [Value]
FROM VTE V
     CROSS APPLY (VALUES(STUFF(V.[Name],1,CHARINDEX(' ',V.[Name]),''))) N(R)
GROUP BY N.R
ORDER BY N.R;

如何确定记录之间的共性?您已经尝试了什么?您是否正在聚合列
Name
中第二个“单词”的值?如果您这样想,那么您应该能够轻松地实现这一点(提示,
SUM
)。如果将
Name
分为两列,一列用于
xxx
,另一列用于
AA
,那么这将简单得多。但这仍然是可能的。这里的问题是,位置可以是字符串中的任何位置,它并不总是2ns位置。这是一个挑战。它应该选择重复的字符串并将其作为一个。只是改进了我的问题。希望我的解释正确。这行不通<代码>按名称分组意味着
xxx AA
yyy AA
没有分组(这是OP的问题)对不起。。。没有正确阅读问题。检查此查询是否要在第一个空格字符后按字符串分组