Sql 如何按不同名称的列求和数据
有这样的疑问:Sql 如何按不同名称的列求和数据,sql,sql-server-2008,tsql,sql-server-2008-r2,Sql,Sql Server 2008,Tsql,Sql Server 2008 R2,有这样的疑问: select [name],count(*) as [count], SUM(balance1) balance1,SUM(balance2) balance2 from mytbl WHERE [date] between ... --some filters GROUP BY [name] 查询结果为: 编辑: name balance1 balance2 count A1 10.00 12.00 10 A2 11.00
select [name],count(*) as [count], SUM(balance1) balance1,SUM(balance2) balance2
from mytbl
WHERE [date] between ... --some filters
GROUP BY [name]
查询结果为:
编辑:
name balance1 balance2 count
A1 10.00 12.00 10
A2 11.00 20.00 20
A3 9.00 5.00 30
BB1 5.00 2.00 45
BB2 1.00 0.00 50
CCC1 15.00 20.00 23
按字母分组结果必须为:
name balance1 balance2 count
A1 10.00 12.00 10
A2 11.00 20.00 20
A3 9.00 5.00 30
SUM 30.00 37.00 60
BB1 5.00 2.00 45
BB2 1.00 0.00 50
SUM 6.00 2.00 95
CCC1 15.00 20.00 23
SUM 15.00 20.00 23
编辑:
样本数据:
如何执行此操作?您可以使用分组集执行此操作:
select coalesce(name, 'SUM') as name,
count(*) as [count],
SUM(balance1) as balance1, SUM(balance2) as balance2
from mytbl
where [date] between ... --some filters
group by grouping sets( (name, left(name, 1)), (left(name, 1)) );
(注意:这使用了
coalesce()
的惰性缩写来标识“SUM”行。)您可以使用分组集来完成此操作:
select coalesce(name, 'SUM') as name,
count(*) as [count],
SUM(balance1) as balance1, SUM(balance2) as balance2
from mytbl
where [date] between ... --some filters
group by grouping sets( (name, left(name, 1)), (left(name, 1)) );
(注意:这使用了coalesce()
的惰性缩写来标识“SUM”行。)使用示例数据进行演示。您可能需要对集合进行分组。此外,结果查询与查询不相同。计数在哪里
?如何检测组?每个组的名称末尾都以1开头?或者每组都以字母A、B、C开头。。?提供样本数据。@laddle为样本添加SQLFIDLEdata@StanislovasKalašnikovas每一组都以相同的名字开始,但在同一组中的数字不同end@lad2025不,这是不同的群组使用示例数据制作演示。您可能需要对集合进行分组。此外,结果查询与查询不相同。计数在哪里
?如何检测组?每个组的名称末尾都以1开头?或者每组都以字母A、B、C开头。。?提供样本数据。@laddle为样本添加SQLFIDLEdata@StanislovasKalašnikovas每一组都以相同的名字开始,但在同一组中的数字不同end@lad2025不,不一样groups@GeoVIP请记住,在这种情况下,A1
和AA1
是相同的group@lad2025我将左(名称,1)更改为左(名称,4)这对我来说永远是独一无二的。谢谢你的帮助advice@GeoVIP请记住,在这种情况下,A1
和AA1
是相同的group@lad2025我将左(名称,1)改为左(名称,4)。这一个对我来说永远是唯一的。谢谢你的建议