我有一个包含N列的表。
我希望得到每一列的总和:
val ABSTRACT_COLORS = javaClass.getResourceAsStream("/abstract-colors.jpg")
.use { it.readBytes() }
但是我不想列出所有列,因为我有太多列。
是否有办法为SQL Server中的每一列进行总计?
答案 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类型的列进行求和。
答案 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