簡體   English   中英

在SQL Server中使用GROUPING SETS時如何對特定列進行排序?

[英]How to sort specific column when using GROUPING SETS in SQL Server?

如果我沒記錯的話,在SQL Server中,當已經有GROUP BY GROUPING SETS時,不建議使用“ ORDER BY”。

我有兩列:[UPC#]和[Description]都是varchar。

我的分組集是這樣的:

GROUP BY 
GROUPING SETS 
(
    ([UPC],[Description])
    ,()     
)

我沒有“ ORDER BY”,但它會自動對“說明”列進行排序。

如果我添加了第三列sum(Qty),則不再按“描述”進行排序。 但是如果我加了

ORDER BY [Description]

sum(Qty)的總計將在第一行而不是最后一行。

有沒有一種方法可以對Description列進行排序,而仍然讓sum(Qty)的總數位於最后一行?

謝謝。

***編輯1 ****,這是我要求的代碼:

SELECT
    CASE WHEN [UPC] IS NULL THEN ''
    ELSE [UPC]
    END AS [UPC]

    ,   CASE WHEN [Description] IS NULL THEN ''
        ELSE [Description] 
        END AS [Description]

    ,CONVERT(int,ROUND(SUM([QtySold]),0)) AS [Total Count]

FROM 
(
    SELECT 
        [UPC]
        ,[Description]
        , sum([QtySold]) as [QtySold]
    FROM [JS_Data].[dbo].[View_ItemMovement_AllItems_withoutZero]
    WHERE 
        ([Description] LIKE '%drink%') 
        AND (SaleDate BETWEEN '2014-01-01' AND '2014-01-15')
        AND ( (StoreNumber = '1') OR (StoreNumber = '2') OR (StoreNumber = '3') OR (StoreNumber = '4') OR (StoreNumber = '6') OR (StoreNumber = '7') OR (StoreNumber = '8') )
    GROUP BY 
            [UPC]
            ,[Description]
) a

GROUP BY 
GROUPING SETS 
    (
        (
            [UPC]
            ,[Description]
        )
        ,()     
    )

ORDER BY [Description]

在此處輸入圖片說明

那么,如何將總計1396移到最后一行?

我意識到這個問題有點老了,但是今天在MCSA學習指南中遇到了一個例子,我想我會分享。 我已經對此進行了測試,並且可以在幾乎相同的分組設置下工作。

...
GROUP BY GROUPING SETS 
(
    ([UPC],[Description])
    ,()     
)
ORDER BY GROUPING(UPC);

我認為您應該了解grouping()函數,如果傳入的列以某種聚合分組的形式加入並且當前值為NULL ,它將返回1 當然,我們需要對Order By子句做一些技巧,如下所示:

--....
GROUP BY 
GROUPING SETS 
(
    (
        [UPC]
        ,[Description]
    )
    ,()     
)
ORDER BY 
      CASE WHEN
           -- this ensures the total row is always put at the end
           GROUPING([UPC]) = 1 AND GROUPING([Description]) = 1 THEN '1'
           ELSE '0' + [Description]
      END

我猜在這種情況下,您甚至可以檢查NULL而不是使用GROUPING ,但這是不安全的(如果在Description中有一些實際的NULL值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM