none
case when问题 RRS feed

  • 问题

  • 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
    2007年8月15日 8:52

答案

  • 意思是:到期时间大于或等于"系统当前时间",也就是今天的日期时
    你后面加的gold desc,expire_date descexpire_date desc
    把所有没有到期的(expire_date<今天的日期)等级从高依次排在最前面~~~`
    2007年8月15日 8:55