SQL 2005用聚合函数统计不同列值

怀木泽 2013-05-31 04:32:08
存储过程接收列名,sum(列名)统计出数据?
请各位大神支招!!









...全文
190 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
MrYangkang 2013-06-03
  • 打赏
  • 举报
回复
引用 10 楼 daisyhuaiju 的回复:
[quote=引用 4 楼 ZaoLianBuXiQi 的回复:]


if object_id('a') is not null
drop table a
go
create table a
(
	id int,
	total float
)
go
if object_id('b') is not null
drop table b
go
create table b
(
	id int,
	price float
)
go
insert into a
select 1,100 union all
select 2,50 union all
select 3,320
go
--drop proc pro_v
go
create proc pro_v
@colmn nvarchar(20)
as 
declare @sql nvarchar(max)
set @sql = 'select sum('+@colmn+') from a'
exec(@sql)
go
exec pro_v total
非数字类型。可能是CHAR()也可能是日期!数据类型 不一定 但是要统计出总数![/quote] 是统计总数,还是总个数,SUM 或者是count?
怀木泽 2013-06-03
  • 打赏
  • 举报
回复
引用 4 楼 ZaoLianBuXiQi 的回复:


if object_id('a') is not null
drop table a
go
create table a
(
	id int,
	total float
)
go
if object_id('b') is not null
drop table b
go
create table b
(
	id int,
	price float
)
go
insert into a
select 1,100 union all
select 2,50 union all
select 3,320
go
--drop proc pro_v
go
create proc pro_v
@colmn nvarchar(20)
as 
declare @sql nvarchar(max)
set @sql = 'select sum('+@colmn+') from a'
exec(@sql)
go
exec pro_v total
非数字类型。可能是CHAR()也可能是日期!数据类型 不一定 但是要统计出总数!
怀木泽 2013-06-03
  • 打赏
  • 举报
回复
引用 3 楼 ap0405140 的回复:
try this,

create proc [存储过程名]
(@col varchar(50))
as
begin
 set nocount on
 declare @tsql varchar(6000)
 
 select @tsql='select sum('+@col+') from [表名]'
 exec(@tsql)
end
因为要SUM(S9001)这样的列名,是非数据类型。所以一直报错!有没有好一点的方法?该方法 我有试过。报错
怀木泽 2013-06-03
  • 打赏
  • 举报
回复
[/code][/quote] 非数字类型。可能是CHAR()也可能是日期!数据类型 不一定 但是要统计出总数![/quote] 是统计总数,还是总个数,SUM 或者是count?[/quote] 是SUM总数 ,不是统计有多少条信息! 我要做的功能是如何实现select sum(@sqlName) from a 这里的@sqlName 是存储过程传入的列名!在SQL中直接查询列是OK的 但是作为参数传值就报错!一直说传入的值类型不对……
美到心痛 2013-05-31
  • 打赏
  • 举报
回复
引用 6 楼 kevin87923 的回复:
[quote=引用 5 楼 sjcss 的回复:] [quote=引用 3 楼 ap0405140 的回复:] try this,

create proc [存储过程名]
(@col varchar(50))
as
begin
 set nocount on
 declare @tsql varchar(6000)
 
 select @tsql='select sum('+@col+') from [表名]'
 exec(@tsql)
end
大概這樣就可以了,參數有表名,列名就要這種動態語句才可以.不過上面的varchar(6000)要改成nvarchar(6000).[/quote] nvarchar可以写6000 不是4000?????[/quote] 嗯,我错了,只能是1~4000,但是如果写成nvarchar(max),可以支持2GB(在2005).
kevin87923 2013-05-31
  • 打赏
  • 举报
回复
引用 5 楼 sjcss 的回复:
[quote=引用 3 楼 ap0405140 的回复:] try this,

create proc [存储过程名]
(@col varchar(50))
as
begin
 set nocount on
 declare @tsql varchar(6000)
 
 select @tsql='select sum('+@col+') from [表名]'
 exec(@tsql)
end
大概這樣就可以了,參數有表名,列名就要這種動態語句才可以.不過上面的varchar(6000)要改成nvarchar(6000).[/quote] nvarchar可以写6000 不是4000?????
美到心痛 2013-05-31
  • 打赏
  • 举报
回复
引用 3 楼 ap0405140 的回复:
try this,

create proc [存储过程名]
(@col varchar(50))
as
begin
 set nocount on
 declare @tsql varchar(6000)
 
 select @tsql='select sum('+@col+') from [表名]'
 exec(@tsql)
end
大概這樣就可以了,參數有表名,列名就要這種動態語句才可以.不過上面的varchar(6000)要改成nvarchar(6000).
MrYangkang 2013-05-31
  • 打赏
  • 举报
回复


if object_id('a') is not null
drop table a
go
create table a
(
	id int,
	total float
)
go
if object_id('b') is not null
drop table b
go
create table b
(
	id int,
	price float
)
go
insert into a
select 1,100 union all
select 2,50 union all
select 3,320
go
--drop proc pro_v
go
create proc pro_v
@colmn nvarchar(20)
as 
declare @sql nvarchar(max)
set @sql = 'select sum('+@colmn+') from a'
exec(@sql)
go
exec pro_v total
唐诗三百首 2013-05-31
  • 打赏
  • 举报
回复
try this,

create proc [存储过程名]
(@col varchar(50))
as
begin
 set nocount on
 declare @tsql varchar(6000)
 
 select @tsql='select sum('+@col+') from [表名]'
 exec(@tsql)
end
铁歌 2013-05-31
  • 打赏
  • 举报
回复
看不太懂楼主的需求哦
怀木泽 2013-05-31
  • 打赏
  • 举报
回复
要求存储过程中接收不同的列名,查询统计出不同列的值! 请大牛,小牛,各种牛帮忙啊!

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧