34,588
社区成员
发帖
与我相关
我的任务
分享
表中字段:area,datetime,company,(city1,city2,city3)
实现:根据指定area,datetime,company 下查询avg(city1)或者avg(city2)或者avg(city3)的平均值
条件:(city1,city2,city3)是表中的列即字段
也就是说city1,city2,city3 是做为参数传到存储过程中的。
--上边不行的话,看这个
CREATE PROCEDURE sp_get
@col nvarchar(20),
@area nvarchar(20),
@datetime datetime,
@company nvarchar(20)
AS
BEGIN
declare @sql varchar(max)
set @sql = N'select avg(' + @col + ') as av_col from Basic where area = ''' + @area + ''' and convert(varchar(10),[datetime],120) = '''
+ convert(varchar(10),@datetime,120) + ''' and company = ''' + @company + ''''
exec(@sql)
end
go
exec sp_get 'city_first',N'上海区','2011-03-01','EMS'
CREATE PROCEDURE sp_get
@col nvarchar(20),
@area nvarchar(20),
@datetime datetime,
@company nvarchar(20)
AS
BEGIN
declare @sql varchar(max)
set @sql = N'select avg(' + @col + ') as av_col from Basic where area = ''' + @area + ''' and convert(varchar(10),[datetime],120) = '''
+ convert(varchar(10),@datetime,120) + ''' and company = ''' + @company + ''
exec(@sql)
end
go
exec sp_get 'city_first',N'上海区','2011-03-01','EMS'
CREATE PROCEDURE sp_get
@col nvarchar(20),
@area nvarchar(20),
@datetime datetime,
@company nvarchar(20)
AS
BEGIN
declare @sql varchar(max)
set @sql = N'select avg(' + @col + ') as av_col from Basic where area = ' + @area + ' and convert(varchar(10),[datetime],120) = ' + convert(varchar(10),@datetime,120) + ' and company = ' + @company
exec(@sql)
end
go
exec sp_get 'city_first',N'上海区','2011-03-01','EMS'
create proc sp_get(@col nvarchar(20),@area nvarchar(20),@datetime datetime,@company nvarchar(20))
as
begin
declare @sql varchar(max)
set @sql = N'select [其他字段可以加在这],avg(' + @col + ') as av_col from tb where area = ' + @area + ' and convert(varchar(10),[datetime],120) = ' + convert(varchar(10),@datetime,120) + ' and company = ' + @company
exec(@sql)
end
go
exec sp_get 'city1'
create proc sp_get(@col nvarchar(20))
as
begin
declare @sql varchar(max)
set @sql = N'select [其他字段可以加在这],avg(' + @col + ') as av_col from tb where area = .. and ...'
exec(@sql)
end
go
exec sp_get 'city1'
create proc sp_get(@col nvarchar(20))
as
begin
declare @sql varchar(max)
set @sql = N'select area,[datetime],[company],avg(' + @col + ') as av_col from tb'
exec(@sql)
end
go
exec sp_get 'city1'
create proc pr_query
@city int
as
if @city = 1
select area,datetime,company,avg(city1) as avgdata
from tablename
group by area,datetime,company
if @city = 2
select area,datetime,company,avg(city2) as avgdata
from tablename
group by area,datetime,company
if @city = 3
select area,datetime,company,avg(city3) as avgdata
from tablename
group by area,datetime,company
go
create procdure pro_city
(
@city1 varchar(10),
@city2 varchar(10),
@city3 varchar(10)
)
select area,datetime,company,avg(..) from tb where @city1='xxx'