[英]A column in a Grouping Set is NULL when it shouldn't be = SQL Server bug, or more likely, do I not understand 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.