日期:2014-05-18 浏览次数:20686 次
create table tb(产品名称 varchar(10),类别 int,佣金 int) insert into tb values('产品1' ,1 ,6) insert into tb values('产品2' ,2 ,3) insert into tb values('产品3' ,1 ,5) insert into tb values('产品4' ,1 ,1) insert into tb values('产品5' ,1 ,9) insert into tb values('产品6' ,2 ,5) insert into tb values('产品7' ,2 ,3) insert into tb values('产品8' ,1 ,100) insert into tb values('产品9' ,1 ,56) insert into tb values('产品10' ,2 ,40) insert into tb values('产品11' ,1 ,22) insert into tb values('产品12' ,1 ,33) insert into tb values('产品13' ,2 ,22) insert into tb values('产品14' ,1 ,9) insert into tb values('产品15' ,1 ,81) insert into tb values('产品16' ,1 ,65) go select 产品名称 ,类别 ,佣金 from ( select t.*, case when 类别 = 2 then ((select count(1) from tb where 类别 = 2 and (佣金 > t.佣金 or (佣金 = t.佣金 and 产品名称 < t.产品名称))) + 1) - 1 when 类别 = 1 then (((select count(1) from tb where 类别 = 1 and (佣金 > t.佣金 or (佣金 = t.佣金 and 产品名称 < t.产品名称))) + 1) - 1)/2 end px1 from tb t ) m order by px1 , 类别 desc , 佣金 desc drop table tb /* 产品名称 类别 佣金 ---------- ----------- ----------- 产品10 2 40 产品8 1 100 产品15 1 81 产品13 2 22 产品16 1 65 产品9 1 56 产品6 2 5 产品12 1 33 产品11 1 22 产品2 2 3 产品5 1 9 产品14 1 9 产品7 2 3 产品1 1 6 产品3 1 5 产品4 1 1 (所影响的行数为 16 行) */