我有一张N列的表格。总计多列
我想有每个单独列的总和:
SELECT
id
, SUM(X1) as X1
, SUM(X2) as X2
, SUM(X3) as X3
............
FROM test
但是我宁愿不要列出所有的列,因为我有太多的人。
是否有办法为SQL Server中的每一列创建总计?
我有一张N列的表格。总计多列
我想有每个单独列的总和:
SELECT
id
, SUM(X1) as X1
, SUM(X2) as X2
, SUM(X3) as X3
............
FROM test
但是我宁愿不要列出所有的列,因为我有太多的人。
是否有办法为SQL Server中的每一列创建总计?
你要求这个
x1 x2 x3
2 3 4
2 3 4
4 6 8 --result
那就试试这个代码
SELECT
SUM(salary) as 'X1',
SUM(age) as 'X2',
SUM(mark) as 'X3'
FROM tsum
您可以使用SQL Server做到这一点:
设置测试模式
create table p (id int, x1 int, x2 int, x3 int);
insert into p values
(1,1,0,1),
(2,1,1,0),
(3,1,0,1),
(1,1,1,1);
现在是SQL
declare @stmt as nvarchar(600);
set @stmt =
(
select concat('select id,', (
SELECT LEFT(column_names , LEN(column_names)-1) AS column_names
FROM information_schema.columns AS extern
CROSS APPLY
(
SELECT concat('sum(',column_name , ') as ', column_name,',')
FROM information_schema.columns AS intern
WHERE extern.table_name = intern.table_name and column_name <> 'ID'
FOR XML PATH('')
) pre_trimmed (column_names)
where table_name = 'p'
GROUP BY table_name, column_names
),
' from p group by id')
);
execute sp_executesql @stmt;
如果你添加了一百个其他列它应该工作。
你基本上建立一个SQL查询字符串,然后执行它。
这里的关键是我假设你有一个ID
列,然后是所有Xn
列。所以,如果你有另一个裁判专栏,说名字,你不想总结你会将你的Information_Schema
查询更改为'和column_name not in ('id','name')
等
如果这也是Onerous,您可以添加一个where子句在内部选择仅对类型为Int的列进行求和。
听起来像也许有很多列并不是最好的方法。每个值类型可以有一行(X1,X2,X3),然后通过'SELECT SUM(value)FROM测试GROUP BY类型'获取所需内容。 –
不在标准SQL中 - 某些提供程序可能具有此语法但我没有知道。你可以编写代码或只是咬住子弹并将其输出 - 可能需要的时间少于编写问题和筛选答案的时间。 –
简单地说,你不能这样做。你可以'使用动态sql,但它可以是复杂的 – TheGameiswar