Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何按不同名称的列求和数据_Sql_Sql Server 2008_Tsql_Sql Server 2008 R2 - Fatal编程技术网

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)。这一个对我来说永远是唯一的。谢谢你的建议