在sqlserver2000中,用什么语句能求出表中一行的最大值?
答案:4 悬赏:0 手机版
解决时间 2021-04-16 06:06
- 提问者网友:兔牙战士
- 2021-04-15 09:40
能否示例说明?
最佳答案
- 五星知识达人网友:酒者煙囻
- 2021-04-15 09:48
MAX是求一列的最大值,不是求一行的最大值。
事实上,所有的集计函数和大小关系函数都是针对于列设计的。
如果希望在一行里面做操作,我能想到的唯一方法是用游标
针对于你这个问题,你需要用到两个游标
第一个游标用来遍历每条记录
第二个游标用来寻找每条记录的最大值
找到以后,依次存储,这样就得到表的一行的最大值了
答案补充:
上面的答案有一个问题 ,第二个游标没法实现,目前我给出一个在知道列数和列名的情况下的例子。更加通用的需要再考虑
例:
假设A表里面有x,y,z3列,并且这3列都是int型列
create table ##temp(max_value int)
declare @x int
declare @y int
declare @z int
declare @max int
declare curRowMax cursor for select x,y,z from A
open curRowMax
fetch next from curRowMax into @x,@y,@z
while @@fetch_status= 0
begin
set @max=@x
if(@y>@max) set @max=@y
if(@z>@max) set @max=@z
insert into ##temp values(@max)
fetch next from curRowMax into @x,@y,@z
end
select * from ##temp
没有SQL环境,所以做不了语法检查,如果有语法上的低级错误,请原谅。
但大概的逻辑大概是这样的。
事实上,所有的集计函数和大小关系函数都是针对于列设计的。
如果希望在一行里面做操作,我能想到的唯一方法是用游标
针对于你这个问题,你需要用到两个游标
第一个游标用来遍历每条记录
第二个游标用来寻找每条记录的最大值
找到以后,依次存储,这样就得到表的一行的最大值了
答案补充:
上面的答案有一个问题 ,第二个游标没法实现,目前我给出一个在知道列数和列名的情况下的例子。更加通用的需要再考虑
例:
假设A表里面有x,y,z3列,并且这3列都是int型列
create table ##temp(max_value int)
declare @x int
declare @y int
declare @z int
declare @max int
declare curRowMax cursor for select x,y,z from A
open curRowMax
fetch next from curRowMax into @x,@y,@z
while @@fetch_status= 0
begin
set @max=@x
if(@y>@max) set @max=@y
if(@z>@max) set @max=@z
insert into ##temp values(@max)
fetch next from curRowMax into @x,@y,@z
end
select * from ##temp
没有SQL环境,所以做不了语法检查,如果有语法上的低级错误,请原谅。
但大概的逻辑大概是这样的。
全部回答
- 1楼网友:酒安江南
- 2021-04-15 11:17
select max(...) from table
- 2楼网友:持酒劝斜阳
- 2021-04-15 11:02
因为你的表已经存在,所以你插入非空的字段必然会导致你的表存在问题!
之前的数据加入新的字段后,所存在的数据必定是空值,可是该字段又不能是空值。
而sql server2000中规定插入新的字段必须满足条件:
1 所插入的字段允许空值!
2 所插入的字段存在默认值!
所以可是使用这样设置:
alter table tbl_users
add a char(10) not null default 0;
就是在后面加上一个默认值,楼主看情况自己设置吧。
- 3楼网友:话散在刀尖上
- 2021-04-15 10:37
Maz()
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯