case when问题

yuxizhou 2007-08-04 04:47:42
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
...全文
195 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoftwKLC 2007-08-05
  • 打赏
  • 举报
回复
无语了~~~
yuxizhou 2007-08-04
  • 打赏
  • 举报
回复
我彻底明白了,very thanks!!!
在路上_- 2007-08-04
  • 打赏
  • 举报
回复
这种写法是刚从你这儿学的。
yuxizhou 2007-08-04
  • 打赏
  • 举报
回复
谢谢xxzxwsx() ,我好象有点头绪了,马上给你加分
在路上_- 2007-08-04
  • 打赏
  • 举报
回复
等于这句
select top 100 *,
(Case When expire_date>=GetDate() Then 0 Else 1 End) AS 是否过期
from [#TEST]
order by 是否过期, gold desc, expire_date desc
yuxizhou 2007-08-04
  • 打赏
  • 举报
回复
不好意思  我还是没明白0,1的真正用意
在路上_- 2007-08-04
  • 打赏
  • 举报
回复
即符合条件expire_date>=GetDate()的要排在前面
在路上_- 2007-08-04
  • 打赏
  • 举报
回复
yuxizhou()
xxzxwsx()朋友:0,1分别是gold和expire_date的位置顺序吗?

不是。
当expire_date>=GetDate()时
order by 0,gold desc,expire desc
要不就是order by 1,gold desc,expire desc

设想“(Case When expire_date>=GetDate() Then 0 Else 1 End)”是数据表中的一个字段,
现在要按这个字段排序,这个字段的值有时是0,有时是1。
在路上_- 2007-08-04
  • 打赏
  • 举报
回复
当expire_date>=GetDate()时上面语句就是order by 0,gold desc,expire desc要不就是order by 1,gold desc,expire desc

这句理解很正确呀?
SoftwKLC 2007-08-04
  • 打赏
  • 举报
回复
yuxizhou() ( ) 信誉:100
那其中的0或1是起什么作用的呢,如果是我那个意思的话 order by 0或order by 1按0或1排序又有什么意思,要不0或1有别的含义?
------------------
上面看错了
order by (Case When expire_date>=GetDate() Then 0 Else 1 End)
升序
0<1
把所有(已到期的, 等级最高,expire_date过期时间越长的排在最前面
这个意思???????
yuxizhou 2007-08-04
  • 打赏
  • 举报
回复
xxzxwsx()朋友:0,1分别是gold和expire_date的位置顺序吗?
yuxizhou 2007-08-04
  • 打赏
  • 举报
回复
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),这条语句最后面的逗号要去掉,即(Case When expire_date>=GetDate() Then 0 Else 1 End)gold desc 意思就是当expire_date>=GetDate()时仅按expire_date排序,而当expire_date<GetDate()时则按gold,expire_date排序,请高手进来帮忙看看呀
在路上_- 2007-08-04
  • 打赏
  • 举报
回复
0排在1的前面,也可以用1、2
yuxizhou 2007-08-04
  • 打赏
  • 举报
回复
那其中的0或1是起什么作用的呢,如果是我那个意思的话 order by 0或order by 1按0或1排序又有什么意思,要不0或1有别的含义?
SoftwKLC 2007-08-04
  • 打赏
  • 举报
回复
Case When expire_date>=GetDate() Then 0 Else 1 End

意思是:到期时间大于或等于"系统当前时间",也就是今天的日期时
你后面加的gold desc,expire_date descexpire_date desc
把所有没有到期的(expire_date<今天的日期)等级从高依次排在最前面~~~
在路上_- 2007-08-04
  • 打赏
  • 举报
回复
应该是你理解的意思

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧