【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',我修改了一下:
运行结果:
下面是问题描述:
例如
列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
相关文章推荐
- 【Transact-SQL】求列最大值(比较特别)
- T-SQL 比较N个指段取其中最大值
- VBA与Transact-SQL 之间的函数比较
- SQL7.0与SQL2000有关最大值参数的比较
- 用Transact-SQL脚本来修改SQL SERVER最大最小内存设置项
- 用Transact-SQL脚本来修改SQL SERVER最大最小内存设置项
- Visual Basic for Applications 与 SQL Server Transact-SQL 之间的函数比较 (ADP)
- 用Transact-SQL脚本来修改SQL SERVER最大最小内存设置项
- oracle 执行计划 consistent gets 特别高sql执行慢 解决办法
- sql 获取最大的流水号
- 聚合函数-transact-sql
- 比较 SQL Server Express 和 MSDE
- 《MS SQL Server 2000管理员手册》系列——15. 使用Transact-SQL和Enterprise Manager管理数据表
- android ListView几个比较特别的属性
- linux_shell_类似sql的orderby 取最大值
- 表提示(Transact-SQL)
- 第一个文章,今天比较兴奋啊! 给大家一个关于SQL复合查询的文章(动态生成多个where条件)
- 长sql通过比较执行计划快速定位问题
- SQL时间相关 - SQL日期,时间比较
- 分页sql中普通写法和rowid写法的性能比较