曾经遇过一个问题,是做一个足球资讯网,在Grid中要显示足球比赛预告和结果.要求是:未比赛的部分按时间顺序显示,已经结束的比赛按时间倒序显示
.当然,用2个记录集来处理非常简单.当时为了省事,所以通过一句SQL完成这种形式的排序
假设表结构为:Tab_Match(MatCh_ID,Local_Team,Away_Team,MatchDate)
- Select Match_ID,Local_Team,Away_Team,MatchDate
- From(
- Select 1 As Sortcol,Match_ID,Local_Team,Away_Team,MatchDate
- From Tab_Match
- Where MatchDate>Getdate()
- Union
- Select 2 As Sortcol,Match_ID,Local_Team,Away_Team,MatchDate
- From Tab_Match
- Where MatchDate<=Getdate()
- ) As UT
- Order By Sortcol,
- Case When Sortcol=1 Then MatchDate End,
- Case When Sortcol=2 Then MatchDate Desc End
使用了Union集合操作之后的Order By只能对整个集合排序,要分别对其中的输入进行排序,可以先用Sortcol对其先区分来源,再使用派生表,CTE(SQL2005+)等方式,避开不受支持的逻辑阶段.