2013-11-23 95 views
0

我正在爲我正在使用的工具的「排行榜」工作,我需要將一些數字合併在一起,並獲得多行記錄的計數。SQL Count/order in order子句

你會在這個存儲過程中看到的是我試圖通過2列的總和來排序記錄。

有關如何完成此任務的任何提示?

AS 
BEGIN 
SET NOCOUNT ON; 
     BEGIN 
      SELECT DISTINCT(whoAdded), 
        count(tag) as totalTags, 
        count(DISTINCT data) as totalSubmissions 
      FROM Tags_Accounts 
      GROUP BY whoAdded 
      ORDER BY SUM(totalTags + totalSubmissions) DESC 
      FOR XML PATH ('leaderboard'), TYPE, ELEMENTS, ROOT ('root'); 
     END 
END 
+0

你得到的錯誤是什麼? – MusicLovingIndianGirl

+0

列名'totalTags'無效。和totalSubmissions – SBB

+0

是的,你得到這些錯誤,因爲'totalTags'和'totalSubmissions'僅僅是別名 – MusicLovingIndianGirl

回答

0

你可以把它在一個派生表做到這一點:

SELECT * 
FROM (
    SELECT DISTINCT(whoAdded) AS whoAdded, 
     count(tag) as totalTags, 
     count(DISTINCT data) as totalSubmissions 
    FROM Tags_Accounts 
    GROUP BY whoAdded 
    ) a 
ORDER BY totalTags + totalSubmissions DESC 
FOR XML PATH ('leaderboard'), TYPE, ELEMENTS, ROOT ('root') 

或者,您也可以通過聚集命令,但我覺得上面是有點清潔/冗餘少:

SELECT DISTINCT(whoAdded) as whoAdded, 
    count(tag) as totalTags, 
    count(DISTINCT data) as totalSubmissions 
FROM Tags_Accounts 
GROUP BY whoAdded 
ORDER BY SUM(count(tag) + count(DISTINCT data)) DESC 
FOR XML PATH ('leaderboard'), TYPE, ELEMENTS, ROOT ('root') 
+0

第一個返回 無效的列名'totalTags'。 列名'totalSubmissions'無效。 – SBB

+0

內部的'SELECT'工作嗎?如果不是,你會得到什麼錯誤? –

+0

是的,內部的工作正常 – SBB

0
SET NOCOUNT ON; 
     BEGIN 
      ;WITH CTE AS(
      SELECT DISTINCT(whoAdded), 
        count(tag) as totalTags, 
        count(DISTINCT data) as totalSubmissions 
      FROM Tags_Accounts 
      GROUP BY whoAdded) 
      SELECT * FROM CTE 
      ORDER BY SUM(totalTags + totalSubmissions) DESC 
      FOR XML PATH ('leaderboard'), TYPE, ELEMENTS, ROOT ('root'); 
     END 
END 
0

不要使用SUM(),只需使用+添加的值,只不過是你se表達式而不是列別名:

ORDER BY count(*) + count(DISTINCT data) DESC