使用派生表避开Union限制

曾经遇过一个问题,是做一个足球资讯网,在Grid中要显示足球比赛预告和结果.要求是:未比赛的部分按时间顺序显示,已经结束的比赛按时间倒序显示

.当然,用2个记录集来处理非常简单.当时为了省事,所以通过一句SQL完成这种形式的排序
假设表结构为:Tab_Match(MatCh_ID,Local_Team,Away_Team,MatchDate)

 

  1. Select Match_ID,Local_Team,Away_Team,MatchDate
  2. From(
  3.  Select 1 As Sortcol,Match_ID,Local_Team,Away_Team,MatchDate
  4.  From Tab_Match
  5.  Where MatchDate>Getdate()
  6.  Union
  7.  Select 2 As Sortcol,Match_ID,Local_Team,Away_Team,MatchDate
  8.  From Tab_Match
  9.  Where MatchDate<=Getdate()
  10. ) As UT
  11. Order By Sortcol,
  12. Case When Sortcol=1 Then MatchDate End,
  13. Case When Sortcol=2 Then MatchDate Desc End 

使用了Union集合操作之后的Order By只能对整个集合排序,要分别对其中的输入进行排序,可以先用Sortcol对其先区分来源,再使用派生表,CTE(SQL2005+)等方式,避开不受支持的逻辑阶段.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值