您的位置:首页 > 数据库

【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


本文出自 “探索SQLServer” 博客,请务必保留此出处http://yupeigu.blog.51cto.com/3323001/1368142
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: