sql列统计求和

我有一张表,里面有200个字段。我通过没条件查询,假设查出10条数据,现在我要把这10条数据按照相同的列进行加和,如果字段少的话 我这样写sql:select sum(A),sum(B),sum(C)from table 但是现在200多个字段我该怎么写呢,求大家帮看看 不要用什么游标,那个我不懂。谢谢啦

第一步 在数据库中 右击-编写脚本为-insert 到

第二步 把字段都拷贝出来


第三步 用替换的方式 把",[" 替换成 "SUM("

 第四步 把"]"括号替换成"),"。

第五步就是把这些列放到一行上面 在替换的时候选择正则表达式 然后把"\n" 换成 "" 空就好。


这个方法看起来步骤多 其实蛮简单的。  希望采纳

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-14

可以完成:

    首先拼接成字符串sum(id),sum(name),sum(type) 形式 

    通过动态执行sql Exce('sql') 来执行就可以了.

案例如下:

SELECT * from Tab
DECLARE @str varchar(500)
--得到tab表下的所有列 拼接成字符串sum(id),sum(name),sum(type) 形式 
--过滤当前表 和类型为int的 where TABLE_NAME='tab' AND DATA_TYPE='int'
--INFORMATION_SCHEMA此视图可以检索存储在数据库中的数据对象的元数据
SELECT @str=STUFF( 
(SELECT ',sum('+COLUMN_NAME+')'+COLUMN_NAME+'sum' from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tab' AND DATA_TYPE='int' FOR XML PATH(''))
,1,1,'')
--用动态执行sql语句执行
EXEC('select '+@str+' from tab')

得到表tab所有的DateType属于int的列

效果图如下:

希望能帮到你!

第2个回答  2018-07-05

有个思路:
1、在系统表中找出表名对应的列名,并把每个列名都加上SUM()

select 'sum('+name+'),' from syscolumns
where id=(select id from sysobjects where name='表名')
2、把查询结果复制出来,前面加select 后面加 from 表名。。。。你懂的
注意:复制出来后把最后一个逗号去掉。
3、执行查询

也可以写个存储过程来完成。

本回答被网友采纳
第3个回答  推荐于2017-12-16
有个思路:
1、在系统表中找出表名对应的列名,并把每个列名都加上SUM()

select 'sum('+name+'),' from syscolumns
where id=(select id from sysobjects where name='表名')
2、把查询结果复制出来,前面加select 后面加 from 表名。。。。你懂的
注意:复制出来后把最后一个逗号去掉。
3、执行查询

也可以写个存储过程来完成追问

是这样的么 不行啊
select 'sum('+name+'),' from sys_columns where id=(select id from sysobjects where name='archive_report_digital')

追答

你用的是什么数据库,存放列名的表是什么??sys_columns不要中间的线,直接syscolumns 我用的是sybase数据库,表名就是这个
你可以sp_help看下
sysobjects是存放表名的系统表
syscolumns是存放列名的系统表

如果和我的不同,可以按你的系统表名改

追问

我的是oracle的

追答

oracle系统表是这样的
user_tables 用户的表对象信息
user_tab_columns 用户的表列信息
你用这两个表关联查下,要考虑表中的关联关系
本人以oracle不是很了解,

本回答被网友采纳
第4个回答  2013-08-14
可以使用存储过程做,由于字段有200个,需要使用存储过程枚举出每个字段,再查询
你可以建一个存储过程
USE 数据库
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create PROCEDURE [dbo].存储过程名称
AS
BEGIN
DECLARE @n int
DECLARE @字段名称 varchar
DECLARE @列和 varchar
SET @n = 1
SET @字段名称 = ''
WHILE @n < 201
begin

select @字段名称=name from syscolumns where id=object_id('表名') and colid=@n
---枚举字段名称

select @列和 = sum(@字段名称) from 表

set @列和 = '第'+@n+'列的和是:'+@列和+','
set @n = @n +1

end

最后输出的结果是 第1列的和是:, 第2列的和是:,......
相似回答