You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:27:05