2011-01-06 6 views
1

에 의해 ORDER 도움 :SQL은 주어

SELECT projectID, urlID, COUNT(1) AS totalClicks, projectPage, 
     (SELECT COUNT(1) 
      FROM tblStatSessionRoutes, tblStatSessions 
      WHERE tblStatSessionRoutes.statSessionID = tblStatSessions.ID 
      AND tblStatSessions.projectID = tblAdClicks.projectID 
      AND (tblStatSessionRoutes.leftPageID = tblAdClicks.projectPage OR 
       tblStatSessionRoutes.rightPageID = tblAdClicks.projectPage)) AS totalViews 
    FROM tblAdClicks 
    WHERE projectID IN (SELECT projectID FROM tblProjects WHERE userID = 5) 
    GROUP BY projectID, urlID, projectPage 

나는 ID = 111 모든 프로젝트가 설정 한 반환 된 데이터의 마지막에 올 수 있도록 그들을 주문해야합니다.

그래서 예를 들어 그것을 반환 할 수 있습니다 :

Project ID 
--------- 
100 
100 
100 
156 
156 
143 
122 
111 
111 
111 
190 
154 
87 

하지만 내가 필요로하는 모든 111의 목록의 마지막에 나타나는 두 개의 쿼리를 사용하지 않고하는 사람이 선택할 수있는 111의 나머지를 선택할 다른 불행히도 충분하지 않습니다. 이는 리소스 집약적 인 쿼리입니다.

alt text

건배!

+1

를 추가합니다. 항상 111로 하드 코드되어 있습니까? 아니면 결국이 데이터를 가져올 수있는 조건이 있습니까? –

+0

예제로 사용하고 있습니다. 값은 코드에서 변수로 바뀝니다. –

+2

음, 내가 말하고있어! 당신은 로열티가없는 무료 이미지를 사용했습니다 ... 음 ... !!! –

답변

5
ORDER BY 
CASE projectID WHEN 111 THEN 1 ELSE 0 END, 
projectID /* etc... */ 
+0

최고 감사합니다! 그러나 목록의 끝을 위해, ** THEN 1 ELSE 0 **는 작동합니다 :) –

+1

나는 그걸 발견했습니다. 결국 ... "THEN 0 ELSE 1 END DESC"라고 말할 수는 있겠지만, 그것은 명백한 imho가 아닙니다. – araqnid

0

당신이 결국 111S를보고 싶어 무엇을 기준으로

order by cast (projectID as integer)