3

以下是我的大型 sql 查询的一部分,在花费数小时后我找不到解决问题的方法。我的要求只是对 RaceNumber 上的记录进行升序排序并将空记录放在底部

SELECT DISTINCT TP.racenumber, 
                TP.teamid, 
                TP.teamname 
FROM   tblteamprofile TP 
ORDER  BY CASE 
            WHEN TP.racenumber IS NULL THEN 1 
            ELSE 0 
          end, 
          TP.teamid, 
          TP.teamname 

任何人都可以帮助我这只是我的卑微请求......!请

4

3 回答 3

12

将缺少的 ORDER BY 项添加到 SELECT 列表中:

SELECT DISTINCT   
  TP.RaceNumber, 
  CASE WHEN TP.RaceNumber is null THEN 1 ELSE 0 END, 
  TP.TeamID,     
  TP.TeamName     
FROM 
  tblTeamProfile TP 
ORDER BY 
  CASE WHEN TP.RaceNumber is null THEN 1 ELSE 0 END,
  TP.TeamID,
  TP.TeamName

正如 Factor Mystic 在评论中敏锐地指出的那样,如果您的 RDBMS 允许在 ORDER BY 子句中重新使用别名,您可以简化查询:

SELECT DISTINCT   
  TP.RaceNumber, 
  CASE WHEN TP.RaceNumber is null THEN 1 ELSE 0 END AS RaceNumberFlag, 
  TP.TeamID,     
  TP.TeamName     
FROM 
  tblTeamProfile TP 
ORDER BY 
  RaceNumberFlag,
  TP.TeamID,
  TP.TeamName
于 2013-02-21T16:27:20.223 回答
3

SELECT问题是如果它不是查询列表的一部分,数据库引擎不知道如何选择该特定值SELECT DISTINCT

如果您不想选择该列,则应该可以使用 aGROUP BY而不是:DISTINCT

SELECT TP.racenumber, TP.teamid, TP.teamname 
FROM tblteamprofile TP 
GROUP BY TP.racenumber, TP.teamid, TP.teamname, 
    CASE WHEN TP.racenumber IS NULL THEN 1 ELSE 0 END
ORDER BY CASE WHEN TP.racenumber IS NULL THEN 1 ELSE 0 END, 
    TP.teamid, TP.teamname 
于 2013-02-21T16:30:10.543 回答
0

也许顺序应该是这样的:

order by (case when tp.RaceNumber is NULL then 1 else 0 end),
         tp.RaceNumber

如果要按 RaceNumber 排序,为什么查询中有 TeamId 和 TeamName?

于 2013-02-21T16:27:51.793 回答