总结多列

时间:2016-09-19 14:40:06

标签: sql sql-server sum

我有一个包含N列的表。

我希望得到每一列的总和:

val ABSTRACT_COLORS = javaClass.getResourceAsStream("/abstract-colors.jpg")
                               .use { it.readBytes() }

但是我不想列出所有列,因为我有太多列。

是否有办法为SQL Server中的每一列进行总计?

2 个答案:

答案 0 :(得分:1)

您可以使用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类型的列进行求和。

http://docs.ansible.com/ansible/playbooks_checkmode.html

答案 1 :(得分:0)

你问这个

吗?
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