2011-01-06 30 views
1

考慮:SQL,幫助ORDER BY

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

在要看看到底111S是根據什麼來。它是否總是硬編碼到111或者是否有一些條件來導出最終應該出現的這些數據? – 2011-01-06 11:56:45

+0

我只是用它作爲例子,值將被代碼中的變量替換。 – 2011-01-06 11:58:45

回答

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

添加

order by cast (projectID as integer)