2016-09-14 1 views
1

Я получил этот запрос:Как я могу упорядочить этот набор результатов с помощью указанного значения агрегата?

Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty' 
from Invoice 
where Unit = 'Sodexo' 
group by PADescription, PAItemCode 

... что делает то, что я хочу, за исключением того, что мне нужно, чтобы результаты были отсортированы DESC на основе вальса в последней колонке (Сумма (Кол-во) как ' Кол-во ')

С этим:

Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty' 
from Invoice 
where Unit = 'Sodexo' 
group by PADescription, PAItemCode 
order by Qty 

... все Qtys являются 0 (они не иначе). То же самое верно, когда я сэндвич «Количество» в одинарные кавычки:

. . . 
order by Qty 

Как я могу получить этот результат установлен на заказ по агрегированной стоимости по убыванию?

+1

Я бы очень осторожным об использовании псевдонимов, как ' 'Qty'' - некоторые формы этого являются устаревшими, и это выглядит как строковый литерал в любом случае. В SQL Server я бы предпочел проприетарный '[Qty]' *, когда требуются идентификаторы с котировками *, но в этом случае они не являются, поскольку 'Qty' не является зарезервированным словом или ключевым словом. –

+0

Полезно знать, спасибо. –

ответ

2
Select top 10 PAItemCode, PADescription, Sum(Qty) as 'Qty' 
from Invoice 
where Unit = 'Sodexo' 
group by PADescription, PAItemCode 
order by Sum(Qty) desc 

Это должно работать

0

Thats работает на MySQL. Одна вещь, вы можете попробовать это изменить имя псевдонима так:

Select PAItemCode, PADescription, Sum(Qty) as 'Qtysum' 
from Invoice 
group by PADescription, PAItemCode 
order by Qtysum desc 
1

Проблема с кода, имеющий такое же имя для столбца, используемого в агрегации и в колонке псевдонима. Переименуйте имя столбца псевдонима для чего-то еще и для того, этого нового псевдонимом

8

Вы должны также включают SUM (кол-во) в порядке, но мое мнение использования с утверждением/CTE, более читаемый а также вы можете применить другую логику на сгруппированных данных

Если у вас есть использовать любую функцию agreegate в операторе выбора, и вы также хотите использовать это в GROUP BY ИЛИ ORDER BY вы должны применить то же логику также.

SELECT 
    TOP 10 PAItemCode, 
    PADescription, 
    Sum(ISNULL(Qty,0)) as 'Qty' 
FROM Invoice 
WHERE Unit = 'Sodexo' 
GROUP BY PADescription, PAItemCode 
ORDER BY Sum(ISNULL(Qty,0)) 

Альтернативный способ использовать CTE/С утверждением:

;WITH T AS 
(
    SELECT 
     TOP 10 PAItemCode, 
     PADescription, 
     Sum(ISNULL(Qty,0)) as 'Qty' 
    FROM Invoice 
    GROUP BY PADescription, PAItemCode 
    WHERE Unit = 'Sodexo' 
) 
SELECT 
    T.PAItemCode, 
    T.PADescription, 
    T.Qty 
FROM T 
ORDER BY T.Qty 
+0

Я бы предпочел CTE. –

+0

Cougars tracking Elephants? –

+0

Я не могу получить вас @shannon –

 Смежные вопросы

  • Нет связанных вопросов^_^