执行查询时出现“选择列表中的列名无效”错误
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
【讨论】:
以上是关于执行查询时出现“选择列表中的列名无效”错误的主要内容,如果未能解决你的问题,请参考以下文章
执行 SQL 查询时出现 Wix 错误 -2147217900