使用派生表避开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+)等方式,避开不受支持的逻辑阶段.

你可能感兴趣的:(sql,资讯,数据库开发应用)