表中字段:area,datetime,company,(city1,city2,city3)
实现:根据指定area,datetime,company 下查询avg(city1)或者avg(city2)或者avg(city3)的平均值
条件:(city1,city2,city3)是表中的列即字段也就是说city1,city2,city3 是做为参数传到存储过程中的。
请问这样的存储过程怎么写?

解决方案 »

  1.   

    最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
    如果有多表,表之间如何关联?
    发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  2.   

    我对存储过程不是很了解,可以给出SQL语句吗
      

  3.   

    create procdure pro_city
    (
    @city1 varchar(10),
    @city2 varchar(10),
    @city3 varchar(10)
    )
    select area,datetime,company,avg(..) from tb where @city1='xxx'
      

  4.   

    create proc pr_query
    @city int
    asif @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,companyif @city = 3
       select area,datetime,company,avg(city3) as avgdata
       from tablename
       group by area,datetime,company
    go
      

  5.   


    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
    goexec sp_get 'city1'
      

  6.   

    area,datetime,company  是作为查询条件的
      

  7.   


    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
    goexec sp_get 'city1'
      

  8.   


    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
    goexec sp_get 'city1'
      

  9.   

    exec sp_get 'city1',N'老家','2011-01-01','火星'
      

  10.   


    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
    goexec sp_get 'city_first',N'上海区','2011-03-01','EMS'
    报错:消息 207,级别 16,状态 1,第 1 行
    列名 '上海区' 无效。
    消息 207,级别 16,状态 1,第 1 行
    列名 'datetime' 无效。
    消息 207,级别 16,状态 1,第 1 行
    列名 'EMS' 无效。
      

  11.   


    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
    goexec sp_get 'city_first',N'上海区','2011-03-01','EMS'
      

  12.   


    --上边不行的话,看这个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
    goexec sp_get 'city_first',N'上海区','2011-03-01','EMS'
      

  13.   

    我按照你的,  但是结果是:NULL