如何使用SQL PIVOT实现按区域分组、按年份统计对象数量?
错误原因
- 外层SELECT错误引用了原表别名
AddressBase:PIVOT操作的数据源是内层子查询d,子查询已将关联后的字段封装,外层直接使用RegionName即可,无需携带原表别名。 - PIVOT聚合函数中错误引用了原表别名
ObjectBase:内层子查询中不存在ObjectBase别名,直接使用子查询返回的ObjectID字段做计数即可。
正确实现代码
SELECT RegionName, [2011], [2012], [2013], [2014], [2015], [2016], [2017] FROM ( SELECT ObjectBase.ObjectID, YEAR(ObjectBase.CreatedOn) yr, AddressBase.RegionName FROM ObjectBase INNER JOIN AddressBase ON AddressBase.ObjectID = ObjectBase.ObjectID AND AddressBase.DeleteStateCode = 0 AND ObjectBase.DeleteStateCode = 0 ) d PIVOT ( COUNT(ObjectID) FOR yr IN ([2011], [2012], [2013], [2014], [2015], [2016], [2017]) ) piv
补充说明
PIVOT会自动按数据源中除了聚合字段、待转列字段之外的所有字段分组,本需求中子查询仅有RegionName、ObjectID、yr三个字段,因此会自动按RegionName分组统计对应年份的对象数量,完全匹配需求。
如果需要将无数据的年份默认显示为0而非NULL,可以使用ISNULL函数包裹年份字段,示例:ISNULL([2011], 0) AS [2011]。
内容的提问来源于stack exchange,提问作者Algrandeth
相关产品推荐
相关产品推荐

