您的位置:首页 > 数据库

【Transact-SQL】求列最大值(比较特别)

2011-10-11 11:03 197 查看
原问题的联接是:http://topic.csdn.net/u/20111009/09/71ab2fe5-9c15-4670-b605-3144b84389cb.html

下面是问题描述:

例如  

列A

0.4mA

0.5mA

1.0A

1.2A

1.6A

单位为A的字段值肯定是大于单位为mA的字段值,如何求出列A中的最大值?

 

 呵呵,原来写的时候用group by分组。

下面是我的解答,是看了11楼的解答后,写出来的,11楼是通过order by来实现的,很简洁很巧妙,但是有错误,当加入一条记录,比如:'1.8mA'时,会返回'1.8mA',而不是'1.6A',我修改了一下:

 

declare  @table table(vc varchar(20))

insert into @table values('0.4mA')
insert into @table values('0.5mA')

insert into @table values('1.8mA')  --增加的记录

insert into @table values('1.0A')
insert into @table values('1.2A')
insert into @table values('1.6A')

insert into @table values('90.6A')  --增加的记录
insert into @table values('100.6A') --后面必须得转化成数值型,
--否则只是按照字符串来排序的话,会返回90.6A
--因为字符串90.6A大于100.6A

select top 1 vc
from @table
order by (case when charindex('mA',vc)<>0
then 'mA'
else
'A'  --因为'mA'>'A',所以这里升序排列,'A'的排在'mA'前面
end) asc ,     --升序排列
cast(replace(
replace(vc,'mA',''),
'A',
'' )
as numeric
) desc


 运行结果:

100.6A


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: