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

SQL截取ParcelID统计次数时报PID列无效的问题如何解决

报错原因

  • SQL的执行顺序中,SELECT 子句的执行优先级晚于 GROUP BY、窗口函数计算等逻辑,因此你在同层级SELECT中定义的别名PID,无法直接被同层级的聚合函数COUNT()引用。
  • 统计分组出现次数的逻辑缺少分组规则,没有指定按什么维度统计计数,本身也不符合聚合查询的语法要求。

解决方法

可以根据你的实际需求选择以下两种写法:

方案1:仅统计每个截取后PID的总出现次数(不需要保留原始ParcelID)

直接在COUNT和GROUP BY中重复截取逻辑即可,是性能最优的写法:

SELECT  
    SUBSTRING(ParcelID, 1, 12) AS PID, 
    COUNT(*) AS PIDCount
FROM    dbo.RptCDMGISExtract
GROUP BY SUBSTRING(ParcelID, 1, 12)

方案2:保留所有原始ParcelID记录,每条记录附带对应PID的总出现次数

用窗口函数实现,不需要分组折叠数据:

SELECT  
    ParcelID,
    SUBSTRING(ParcelID, 1, 12) AS PID,
    COUNT(*) OVER (PARTITION BY SUBSTRING(ParcelID, 1, 12)) AS PIDCount
FROM    dbo.RptCDMGISExtract

如果你的数据库支持CTE语法,也可以先定义别名再做统计,避免重复写截取逻辑,可读性更高:

WITH PIDExtract AS (
    SELECT 
        ParcelID,
        SUBSTRING(ParcelID, 1, 12) AS PID
    FROM dbo.RptCDMGISExtract
)
SELECT 
    PID,
    COUNT(*) AS PIDCount
FROM PIDExtract
GROUP BY PID

内容的提问来源于stack exchange,提问作者Steve Fama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 09:45:05