2013-08-05 2 views
0

계산 된 열 "그룹"을 그룹화하는 SQL Server 2008 쿼리가 있습니다. "포인트"넥타이가 다른 필드를 찾아 올바른 순서를 결정해야합니다.하위 쿼리로 순서를 설정할 때 합계 열별 SQL 순서

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 이 때문에 서브 쿼리의 일종해야 할 것인가? 같은

+0

추가 사례 문을 쿼리의 열로 추가 한 다음 ORDER BY 절에 포함 할 수 있습니까? –

답변

1

뭔가 :

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 

는 2 차 필드를 원하는 방법에 따라 오름차순 다른 값 앞에 오는 분류는 NULL 반환 것이다 ELSE와 함께, 당신은 ELSE 변경할 수 있습니다 처리 할 수 ​​있습니다.

+0

완벽. 감사! – kylemac