求存储过程

raymond123456 2011-03-24 03:51:36
表中字段:area,datetime,company,(city1,city2,city3)
实现:根据指定area,datetime,company 下查询avg(city1)或者avg(city2)或者avg(city3)的平均值
条件:(city1,city2,city3)是表中的列即字段

也就是说city1,city2,city3 是做为参数传到存储过程中的。



请问这样的存储过程怎么写?
...全文
132 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
raymond123456 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 acherat 的回复:]
SQL code

--上边不行的话,看这个

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……
[/Quote]

这个是正确的,谢谢!
raymond123456 2011-03-24
  • 打赏
  • 举报
回复
我按照你的, 但是结果是:NULL
AcHerat 元老 2011-03-24
  • 打赏
  • 举报
回复

--上边不行的话,看这个

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'

raymond123456 2011-03-24
  • 打赏
  • 举报
回复
表结构:

表数据:

AcHerat 元老 2011-03-24
  • 打赏
  • 举报
回复

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'

raymond123456 2011-03-24
  • 打赏
  • 举报
回复

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'


报错:消息 207,级别 16,状态 1,第 1 行
列名 '上海区' 无效。
消息 207,级别 16,状态 1,第 1 行
列名 'datetime' 无效。
消息 207,级别 16,状态 1,第 1 行
列名 'EMS' 无效。
王向飞 2011-03-24
  • 打赏
  • 举报
回复
最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
如果有多表,表之间如何关联?



raymond123456 2011-03-24
  • 打赏
  • 举报
回复
我先去测试,成功就结贴!
AcHerat 元老 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 acherat 的回复:]

SQL code

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……
[/Quote]


exec sp_get 'city1',N'老家','2011-01-01','火星'
AcHerat 元老 2011-03-24
  • 打赏
  • 举报
回复

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'

AcHerat 元老 2011-03-24
  • 打赏
  • 举报
回复

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'
昵称被占用了 2011-03-24
  • 打赏
  • 举报
回复
搂主说不清就举例吧,列出数据及需要的结果
别浪费大家时间
raymond123456 2011-03-24
  • 打赏
  • 举报
回复
area,datetime,company 是作为查询条件的
AcHerat 元老 2011-03-24
  • 打赏
  • 举报
回复

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'
Mr_Nice 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fredrickhu 的回复:]

引用 5 楼 haiwer 的回复:
SQL code
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
se……
[/Quote]

我想你的没错!
raymond123456 2011-03-24
  • 打赏
  • 举报
回复
不仅仅是3个哦 这个我举个例子而已,实际表中有很多字段
--小F-- 2011-03-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 haiwer 的回复:]
SQL code
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……
[/Quote]
丫的 我想错了?
昵称被占用了 2011-03-24
  • 打赏
  • 举报
回复
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
--小F-- 2011-03-24
  • 打赏
  • 举报
回复
create procdure pro_city
(
@city1 varchar(10),
@city2 varchar(10),
@city3 varchar(10)
)
select area,datetime,company,avg(..) from tb where @city1='xxx'
raymond123456 2011-03-24
  • 打赏
  • 举报
回复
我对存储过程不是很了解,可以给出SQL语句吗
加载更多回复(2)
慧龙照片恢复软件是一个特殊的数据恢复工具,专门用于恢复误删除、格式化、文件系统错误、分区打不开等造成的照片文件丢失;支持硬盘、光盘、U盘、MP3、数码相机、手机、存储卡等存储介质。支持FAT、FAT32、NTFS、CDFS等各种分区格式,但不能恢复在NTFS分区中压缩存储的文件,也不能恢复加密的文件。全盘扫描查找照片数据,不放过任何一个可恢复的照片文件。   慧龙照片恢复软件在恢复文件过程中不会往源分区写入数据,因此可保证不会对源数据造成再次损害,可放心使用。软件还支持从磁盘映像文件中恢复照片文件,方便进行异地数据恢复,软件本身也具有制作磁盘映像文件的功能。   本软件目前仅支持恢复JPG格式的照片文件(更多文件格式正在增加中),JPG格式是最流行的数码照片文件格式,绝大多数数码相机及拍照手机均采用该格式存储照片,因此慧龙照片恢复软件能胜任绝大多数照片文件的恢复任务,照片恢复的成功率也很高。   慧龙照片恢复软件会提取照片文件中的拍照时间,作为恢复出来的文件修改时间,方便恢复后对照片进行整理。只要在文件夹里选择按“修改时间”排序,照片就是按拍照的先后顺序排列了,非常方便。   提示: 不要下载软件到要恢复数据的盘符里,也不要解压文件到要恢复的盘符里,否则可能再次破坏源数据。如果是相机直接连接电脑进行数据恢复,请保证电池电量足够,免得恢复过程中耗完电了,下次又要重新扫描。   为什么选择慧龙照片恢复软件?与其他数据恢复软件相比,慧龙照片恢复软件具有以下特点:   1. 逐一扫描存储扇区,寻找照片数据,提高照片文件恢复成功率;   2. 使用超简单,鼠标点击几下即可开始恢复;   3. 体积小,下载快,绿色软件,无需安装,不会在系统里留下任何垃圾;   4. 不依赖于文件系统,即使目录区、文件分配表完全损毁也能进行恢复;   5. 支持从映像文件恢复照片,因而可完全避免反复扫描对源数据造成损害;软件本身也包含制作映像文件的功能。

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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