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的问题)对不起。。。没有正确阅读问题。检查此查询是否要在第一个空格字符后按字符串分组