使用HADING和GROUPING SETS

Ker*_*ros 1 sql sql-server

我的sql字符串如下

SELECT Country, City, COUNT(*) AS [Count]
FROM   CountriesAndCities
GROUP  BY GROUPING SETS ( ( Country, City ), ( Country) )     
ORDER  BY Country, City 
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下

Country     City        CountryCount
----------  ----------  ------------
France      NULL        4 
France      Paris       4           
Spain       NULL        6 
Spain       Barcelona   3           
Spain       Madrid      3   
Run Code Online (Sandbox Code Playgroud)

如果国家只有一个城市记录,我可以使用HAVING获得如下结果

Country     City        CountryCount
----------  ----------  ------------
France      Paris       4           
Spain       NULL        6 
Spain       Barcelona   3           
Spain       Madrid      3  
Run Code Online (Sandbox Code Playgroud)

Mat*_*lie 6

SELECT Country, City, COUNT(*) AS [Count]
FROM   CountriesAndCities
GROUP  BY GROUPING SETS ( ( Country, City ), ( Country) )
HAVING GROUPING(City) = 0
    OR COUNT(DISTINCT City) > 1
ORDER  BY Country, City
Run Code Online (Sandbox Code Playgroud)
  • GROUPING(City) = 0如果City其中一个字段当前正在分组.
  • 相反,当GROUPING(City) = 1City被报告为NULL.

这意味着我们总是包含City提到的行(不是NULL).

对于其他行,其中GROUPING(City) = 1aka City IS NULL,那么如果City已将多个聚合到结果中,则我们仅包括该行.

  • 抱歉,我搞反了;)我现在已经更新了。请参阅 https://msdn.microsoft.com/en-us/library/ms178544.aspx (2认同)