0

我有一个 SQL Server 2008 查询,它对计算列“点”进行分组。当“点”平局时,我需要查看另一个字段以确定正确的顺序。

SELECT     
    p.DriverID, 
    p.DriverName, 
    p.CarNum, 
    SUM(CASE WHEN r.RaceType = 10 THEN (200 - ((p.CarPosition - 1) * 2)) ELSE 0 END) AS Points
FROM
    RaceParticipants AS p 
    INNER JOIN Race AS r ON p.RaceID = r.RaceID
GROUP BY 
    r.RaceDateID, p.DriverID, p.DriverName, p.CarNum
HAVING
    (r.RaceDateID IN (255, 256))
ORDER BY 
    Points DESC

我需要查看的列是p.CarPosition WHERE r.RaceType = 60 所以它必须是某种子查询?

4

1 回答 1

2

就像是:

SELECT DriverID, DriverName,CarNum,Points
FROM (SELECT     
           p.DriverID, 
           p.DriverName, 
           p.CarNum, 
           SUM(CASE WHEN r.RaceType = 10 THEN (200 - ((p.CarPosition - 1) * 2)) ELSE 0 END) AS Points,
           MAX(CASE WHEN r.RaceType = 60 THEN p.CarPosition ELSE 999999 END) AS OrderField
      FROM
           RaceParticipants AS p 
           INNER JOIN Race AS r ON p.RaceID = r.RaceID
      WHERE r.RaceDateID IN (255, 256)
      GROUP BY 
           r.RaceDateID, p.DriverID, p.DriverName, p.CarNum
   )sub
ORDER BY 
    Points DESC, OrderField

根据您希望如何处理 2nd order 字段,您可以更改ELSE,而不会ELSE返回NULL哪个排序升序在其他值之前。

于 2013-08-05T16:53:14.430 回答