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

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值