日期:2014-05-18  浏览次数:20453 次

多列比较/排序
select     *     from     f()    
结果如下:    
id             sss         qqq    
01             1.2         1    
02             1             0    
03             1.2         0.5    
04             1.2         0.5    
..             ...         ...    
 
希望得到如下结果:    
id             sss             qqq         seq    
01             1.2             1                     1    
02             1                 0                     4    
03             1.2             0.5             2        
04             1.2             0.5             2    
...    
 
先比较SSS的大小,如果相同再比较QQQ的值,排序.
如果都相同,就并列.
空出占用的号码

------解决方案--------------------
另外一种方法:
declare @t table(id int,sss decimal(5,2),qqq decimal(5,2))
insert @t
select '01 ', 1.2, 1 union all
select '02 ', 1, 0 union all
select '03 ', 1.2, 0.5 union all
select '04 ', 1.2, 0.5

SELECT *,
seq = (select count(*) + 1 from @t where sss > a.sss or(sss = a.sss and qqq > a.qqq))
FROM @t AS a

/*结果
id sss qqq seq
----------- ------- ------- -----------
1 1.20 1.00 1
2 1.00 .00 4
3 1.20 .50 2
4 1.20 .50 2
*/