2016-09-14 104 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 –