2016-09-14 105 views
1

我有此查询:如何按指定的聚合值排序此结果集?

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

...那我想要做什么,但我需要的结果,基于在最后一列(总和(数量)为丘壑进行排序倒序“数量“)

有了这个:

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

这就是MySQL的工作。 有一件事你可以尝试是改变别名是这样的:

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

与代码的问题是其在聚集和别名列使用列相同的名字。通过这种新的别名命名别名列名到别的东西和秩序

8

你也必须包括为了SUM(数量)由,但我的看法是与语句中使用/ CTE,更可读,你也可以在对分组数据

应用其他逻辑,如果你有使用SELECT语句的任何agreegate功能,你也想用在GROUP BYORDER 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语句:

;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

美洲豹追踪大象? –

+0

我找不到你@shannon –