Sql 获取每个城市的客户数量和每个国家/地区的客户总数一张表

Sql 获取每个城市的客户数量和每个国家/地区的客户总数一张表,sql,sql-server,adventureworks,Sql,Sql Server,Adventureworks,我需要将这两个SQL脚本合并为一个脚本:从AdventureWorks数据库中获取每个城市的客户数量和每个国家的客户总数 我几乎完成了,问题是我需要制作一个表,多个计数都有问题 USE AdventureWorks2014 SELECT person.Address.City, Count (*) AS Total FROM person.Address INNER JOIN person.StateProvince ON person.Address.StateProvinceID

我需要将这两个SQL脚本合并为一个脚本:从AdventureWorks数据库中获取每个城市的客户数量和每个国家的客户总数

我几乎完成了,问题是我需要制作一个
,多个
计数
都有问题

 USE AdventureWorks2014
SELECT person.Address.City, Count (*) AS Total
FROM person.Address
INNER JOIN person.StateProvince
    ON person.Address.StateProvinceID = person.StateProvince.StateProvinceID
GROUP BY person.Address.City 
ORDER BY Total DESC


最简单的方法是
联合所有
。但是,您可以对分组集执行基本相同的操作:

SELECT COALESCE(a.City, sp.CountryRegionCode) as City_or_Region,
       Count(*) AS Total
FROM person.Address a INNER JOIN
     person.StateProvince sp
     ON a.StateProvinceID = sp.StateProvinceID
GROUP BY GROUPING SETS ((a.City), (sp.CountryRegionCode))
ORDER BY Total DESC;
请注意,这对数据做出了两个假设:

  • City
    从不为
    NULL
  • City
    CountryRegionCode
    的值永远不会相同(如果需要,可以将它们拆分为单独的列)

您应该显示所需的结果。让我编辑它,然后我会收到错误“无效列名'CountryRegionCode'。”,可能是因为CountryRegionCode不是person.Addres列
SELECT COALESCE(a.City, sp.CountryRegionCode) as City_or_Region,
       Count(*) AS Total
FROM person.Address a INNER JOIN
     person.StateProvince sp
     ON a.StateProvinceID = sp.StateProvinceID
GROUP BY GROUPING SETS ((a.City), (sp.CountryRegionCode))
ORDER BY Total DESC;