我怎样才能按指定的聚合值对这个结果集进行排序?

How can I order this result set by the named aggregate value?

我有这个查询:

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

...这就是我想要的,除了我需要根据最后一列中的值对结果进行降序排序 (Sum(Qty) as 'Qty')

有了这个:

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

...所有数量均为 0(否则不是)。当我将 "Qty" 夹在单引号内时也是如此:

. . .
order by Qty

如何让这个结果集按聚合值降序排序?

那是在 MySQL 上工作。 您可以尝试的一件事是像这样更改别名:

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

这应该有效

代码的问题是聚合中使用的列和别名列具有相同的名称。将别名列名重命名为其他名称并按此新别名排序

你还必须 按顺序包含 SUM(Qty) ,但我的意见是 use with statement / CTE,它是更具可读性,您还可以对分组数据应用其他逻辑

如果您在 select 语句中使用了任何同意函数并且您还想在 GROUP BY OR ORDER BY[=23 中使用它=] 你必须也应用相同的逻辑。

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 语句的替代方法:

;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