2016-04-24 51 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