执行查询时出现“选择列表中的列名无效”错误

Posted

技术标签:

【中文标题】执行查询时出现“选择列表中的列名无效”错误【英文标题】:I'm getting 'Column name is invalid in the select list' error when i execute the query 【发布时间】:2015-04-10 12:23:08 【问题描述】:

这是我的查询,

SELECT TOP (3) 
    a.INCIDENT_ID, a.REFERENCE, SUM(b.COST) AS TOTAL_COST
FROM          
    FDDC_T_D_INCIDENT AS a 
INNER JOIN
    FDDC_T_D_INCIDENT_COST AS b ON a.INCIDENT_ID = b.FINCIDENT_ID
WHERE        
    (a.CREATED_DATE >= @date1) AND (a.CREATED_DATE <= @date2)
GROUP BY 
    a.INCIDENT_ID
ORDER BY 
    TOTAL_COST DESC

我遇到了一个错误

选择列表中的列“FDDC_T_D_INCIDENT.REFERENCE”无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

有人可以帮我解决这个问题吗?

提前致谢!

【问题讨论】:

一般的 group by 规则是:“如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数”。因此,要么在 GROUP BY 子句中列出该列,要么将其用作集合函数的参数! 很清楚哪里错了,加a.Reference到群by.. 您真正需要做的就是阅读错误消息——它会告诉您该怎么做。 @Madushi,请说明您想要的结果。如果您有多行相同的INCIDENT_ID 但不同的REFERENCE 值,则应在结果中返回REFERENCE 值,因为GROUP BY 仅在INCIDENT_ID 上。 每个INCIDENT_ID 有多少参考资料?如果你有多个,你想选择哪一个? 【参考方案1】:

试试这个:

SELECT        TOP (3) a.INCIDENT_ID, a.REFERENCE, SUM(b.COST) AS TOTAL_COST
FROM          FDDC_T_D_INCIDENT AS a INNER JOIN
              FDDC_T_D_INCIDENT_COST AS b ON a.INCIDENT_ID =b.FINCIDENT_ID
WHERE        (a.CREATED_DATE >= @date1) AND (a.CREATED_DATE <= @date2)
GROUP BY a.INCIDENT_ID, a.REFERENCE
ORDER BY TOTAL_COST DESC

您需要在 GROUP BY 子句中添加“a.REFERENCE”。

编辑:

如果您只想 GROUP BY 'a.INCIDENT_ID',请试试这个:

SELECT INCIDENT_ID, REFERENCE, TOTAL_COST
FROM(
        SELECT        TOP (3) a.INCIDENT_ID, a.REFERENCE, SUM(b.COST) AS TOTAL_COST
        FROM          FDDC_T_D_INCIDENT AS a INNER JOIN
                      FDDC_T_D_INCIDENT_COST AS b ON a.INCIDENT_ID =b.FINCIDENT_ID
        WHERE        (a.CREATED_DATE >= @date1) AND (a.CREATED_DATE <= @date2)
        GROUP BY a.INCIDENT_ID, a.REFERENCE
        ORDER BY TOTAL_COST DESC
    ) AS T
GROUP BY INCIDENT_ID

希望这会有所帮助。

【讨论】:

是的,它有效。但我只想使用 a.INCIDENT_ID 进行分组。那么您能告诉我,如何将此查询更改为仅使用 a.INCIDENT_ID 进行分组。 当我执行您的查询时,它给出了一个错误提示“找不到多部分标识符”“a.INCIDENT_ID”和“多部分标识符”“a.REFERENCE”找不到'- 很抱歉,但现在它给出了一个错误“列“T.REFERENCE”在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中'【参考方案2】:

试试这个,按 Incident_ID 分组并返回引用(如果事件有多个引用,将返回具有相同总成本的多行)。

SELECT TOP (3) 
    a.INCIDENT_ID, a.REFERENCE, SUM(b.COST) over (partition by a.incident_ID) AS TOTAL_COST
FROM          
    FDDC_T_D_INCIDENT AS a 
INNER JOIN
    FDDC_T_D_INCIDENT_COST AS b ON a.INCIDENT_ID = b.FINCIDENT_ID
WHERE        
    (a.CREATED_DATE >= @date1) AND (a.CREATED_DATE <= @date2)
ORDER BY 
    TOTAL_COST DESC

【讨论】:

以上是关于执行查询时出现“选择列表中的列名无效”错误的主要内容,如果未能解决你的问题,请参考以下文章

执行 vba 查询 ms 访问时出现运行时错误 3075

执行 SQL 查询时出现 Wix 错误 -2147217900

在 python 代码中执行更新查询时出现此错误

Symfony 5 执行 AJAX 查询时出现错误 500

java.lang.OutOfMemoryError:执行 Hive 查询时出现 Java 堆空间错误

执行 oracle 更改查询时出现错误:ORA-01756:引用的字符串未正确终止