2013-07-09 2 views
0

Я новичок в SQL, так что это может быть очень распространенный/простой вопрос, Я хочу заказать их от наивысшего до самого низкого, а не для Team 1, Team 2, Team 3. См. Ниже :Закажите вывод нескольких выборок в SQL

SQL

Select (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '1' and W.Activity = '2') AS Team1, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '2' and W.Activity = '2') AS Team2, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '3' and W.Activity = '2') AS Team3, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '4' and W.Activity = '2') AS Team4, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '5' and W.Activity = '2') AS Team5, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '6' and W.Activity = '2') AS Team6, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '7' and W.Activity = '2') AS Team7, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '8' and W.Activity = '2') AS Team8, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '9' and W.Activity = '2') AS Team9, 
    (select SUM(Amt) from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '10' and W.Activity = '2') AS Team10 

Сейчас результат показывает, как это:

enter image description here

Я хочу, чтобы показать высшего к низшему, а т han по имени команды. Можно ли это сделать с помощью заказа? Я просто не могу заставить его работать.

команда 2 - 597, Команда 7 - 540, команда 3 - 467 и т.д.

+0

Вы возвращающая одну строку, так ORDER BY не точно будет работать. –

+0

, если вы сначала вернете их как строки, затем закажите их, а затем, наконец, поверните их, вы можете заставить его работать. – Randy

+0

Я должен попросить. – techora

ответ

1

Как и Аарон Бертран, упомянутый выше, ORDER BY не применяется к одной строке.

Вы можете изменить свой запрос, как этот

select T.Team ,SUM(Amt) as TeamTotal 
from Tracker W 
JOIN Teams T 
    ON W.Username = T.Name 
where W.Activity = '2' 
AND (ISNUMERIC(T.Team) = 1 AND CAST(T.Team AS INT) BETWEEN 1 AND 10) 
GROUP BY T.Team 
ORDER BY TeamTotal DESC 
+0

Я получаю команду «Column» Teams.Team 'недопустима в списке выбора, потому что она не содержится ни в агрегатной функции, ни в предложении GROUP BY. " при попытке этого. Какие-либо предложения? – techora

+0

@kcray Не должно быть T.Team? Я подозреваю, что вы не скопировали образец кода правильно. –

+0

@kcray, извините, забыл GROUP BY, ответ обновлен – EricZ

1

Order by является строкой операция на основе, а не на основе столбца. Что вы можете сделать, так это преобразовать этот запрос в соответствие с строкой и упорядочить по значению.

select * from (
    select SUM(Amt) as Amt, 'Team1' as Team from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '1' and W.Activity = '2' 
    union 
    select SUM(Amt), 'Team2' from Tracker W JOIN Teams T ON W.Username = T.Name where T.Team = '2' and W.Activity = '2' 
    ...) as T 
order by Amt