原问题的联接是: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