我有一个表,其中包含如下记录。
表格:
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
我想获取通用记录并添加这些记录的值。 预期的输出表是:
TableOut
ID Name Value
1 AA 41
2 B 40
3 C 30
以上仅是一些记录的示例。但是,该表有100多个记录,并且可能 将来,记录将被动态添加。 注意:我很好,如果它选择了重复的子字符串并将其作为单个记录读取。
我该如何实现?
答案 0 :(得分:1)
尝试一下:
-- 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
答案 1 :(得分:0)
编辑:
SELECT SUBSTRING(name, CHARINDEX(' ', name) +1, 20), SUM(Value)
from table
group by SUBSTRING(name, CHARINDEX(' ', name) +1, 20)
答案 2 :(得分:0)
尝试一下。
{
"iisSettings": {
"iisExpress": {
"applicationUrl": "http://localhost:12345",
"sslPort": 98765 <== Change_this
}
},
第一列实际上是序列号
答案 3 :(得分:0)
如何使用STUFF
做到这一点:
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;