2016-04-24 55 views
0

我想通過使用分組集的查詢來顯示組中的某些列。我也想只訂購其他專欄。SQL Server使用不同的分組依據和按列排序的子查詢

爲此,我使用了子查詢。

我有兩個問題:

  1. 是否有按組和order by DIFF列更好的辦法?

  2. 以這種方式使用子查詢是否存在性能問題?

查詢:

SELECT Region, State, Sales FROM (
    SELECT RegionID, Region, StateID, State, SUM(Sales) AS Sales 
    FROM Sales 
     GROUP BY 
      GROUPING SETS(
       (RegionId, Region, StateID, State), 
       (StateId, State), 
       () 
      ) 
    ) As T1 
ORDER BY RegionID, StateID 

原因,我想這樣做是因爲我想通過不同的列比我通過分組排序。但由於我通過查詢使用組,我必須使用所有列。

回答

1

您的查詢完好無損。但是,我不認爲你需要子查詢:

SELECT Region, State, SUM(Sales) AS Sales 
FROM Sales 
GROUP BY GROUPING SETS((Region, State), (State),()) 
ORDER BY MAX(RegionID), MAX(StateID); 

您可以在ID上使用聚合函數來進行排序。

請注意,子查詢引起的性能損失非常小。我能想到的唯一問題是聚合密鑰的時間稍長一些,並且可能會有非常小的性能損失。

+0

太好了。謝謝。 – ptownbro