2013-11-23 4 views
0

Я работаю над «Лидерской панелью» для инструмента, над которым я работаю, и мне нужно собрать несколько чисел и получить количество записей по нескольким строкам.SQL Count/sum в порядке заказа

Что вы увидите в этой хранимой процедуре, я пытаюсь заказать записи на сумму в 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(), просто используйте +, чтобы добавить значения, и только U se выражения, а не псевдонимы столбцов:

ORDER BY count(*) + count(DISTINCT data) DESC 
Смежные вопросы