sql列统计求和 100
我有一张表,里面有200个字段。我通过没条件查询,假设查出10条数据,现在我要把这10条数据按照相同的列进行加和,如果字段少的话我这样写sql:selectsum(A),...
我有一张表,里面有200个字段。我通过没条件查询,假设查出10条数据,现在我要把这10条数据按照相同的列进行加和,如果字段少的话 我这样写sql:select sum(A),sum(B),sum(C)from table 但是现在200多个字段我该怎么写呢,求大家帮看看 不要用什么游标,那个我不懂。谢谢啦
展开
9个回答
展开全部
可以完成:
首先拼接成字符串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的列
效果图如下:
希望能帮到你!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个思路:
1、在系统表中找出表名对应的列名,并把每个列名都加上SUM()
select 'sum('+name+'),' from syscolumns
where id=(select id from sysobjects where name='表名')
2、把查询结果复制出来,前面加select 后面加 from 表名。。。。你懂的
注意:复制出来后把最后一个逗号去掉。
3、执行查询
也可以写个存储过程来完成。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个思路:
1、在系统表中找出表名对应的列名,并把每个列名都加上SUM()
select 'sum('+name+'),' from syscolumns
where id=(select id from sysobjects where name='表名')
2、把查询结果复制出来,前面加select 后面加 from 表名。。。。你懂的
注意:复制出来后把最后一个逗号去掉。
3、执行查询
也可以写个存储过程来完成
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是存放列名的系统表
如果和我的不同,可以按你的系统表名改
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以使用存储过程做,由于字段有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列的和是:,......
你可以建一个存储过程
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列的和是:,......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询