2011-01-06 9 views
1

BY ORDERを支援:= 111 IDを持つすべてのプロジェクトは、返されたデータセットの最後に来るように、私はそれらを注文する必要が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 

を。

だから、例えばそれが返される可能性があります:

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

をしかし、私はすべての111の残りの部分を選択するために、2つのクエリ、111年代を選択するための1、その他を使用せずに、リストの最後に表示する必要があります残念なことに、これはかなりリソース集中型のクエリであるため、十分ではありません。

alt text

乾杯!

+1

を追加します。それは常に111にハードコードされているのですか、またはこのデータを導出するための条件がありますか? –

+0

私はこれを例として使用していますが、値はコード内の変数に置き換えられます。 –

+2

ummmm、私は言っている!あなたは、ロイヤリティフリーのイメージを使用していません... ummm !!! –

答えて

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"と言うこともできます。 – araqnid

0

あなたが最後に111Sを見たいと思って何に基づき

order by cast (projectID as integer)