case when问题
gold是等级 expire_date是到期时间
根据前面的查询是按等级后再按到期时间,这样的话高等级的过期的人就在低等级没过期的人的前面.
现在要做成 过期的都要到后面显示 无论等级是多少 而没过期的还是正常按等级及到期时间排列
Create Table #TEST
(ID Int,
gold Int,
expire_date DateTime)
Insert #TEST Select 1,2, '2006-06-30 '
Union All Select 2,3, '2006-06-30 '
Union All Select 3,5, '2006-05-30 '
Union All Select 4,6, '2006-06-12 '
Union All Select 5,10, '2006-07-30 '
Union All Select 6,1, '2006-08-30 '
Union All Select 6,1, '2008-08-30 '
Union All Select 6,1, '2009-08-30 '
select top 100 * from [#TEST] order by (Case When expire_date> =GetDate() Then 0 Else 1 End), gold desc,expire_date desc
Case When expire_date> =GetDate() Then 0 Else 1 End这个表达式是什么意思,是不是当expire_date> =GetDate()时上面语句就是order by 0,gold desc,expire desc要不就是order by 1,gold desc,expire desc
------解决方案--------------------等于这句
select top 100 *,
(Case When expire_date> =GetDate() Then 0 Else 1 End) AS 是否过期
from [#TEST]
order by 是否过期, gold desc, expire_date desc