Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中
我试图返回一个表,其中包含使用嵌套集模型表示的层次结构中的节点深度,我遵循本教程,但“查找节点深度”一节中使用的查询不适用于我: 运行此查询时,出现错误“列'CompanyGroup.GroupName'在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。” 谁能解释一下原因吗 编辑:错误消息中的列错误,我很抱歉错误是:“column”CompanyGroup.LeftID“无效…”请尝试此列-Sql 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我试图返回一个表,其中包含使用嵌套集模型表示的层次结构中的节点深度,我遵循本教程,但“查找节点深度”一节中使用的查询不适用于我: 运行此查询时,出现错误“列'CompanyGroup.GroupName'在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。” 谁能解释一下原因吗 编辑:错误消息中的列错误,我很抱歉错误是:“column”CompanyGroup.LeftID“无效…”请尝试此列- SELECT node.GroupName , depth =
SELECT
node.GroupName
, depth = COUNT(parent.GroupName) - 1
FROM CompanyGroup node
JOIN CompanyGroup parent ON node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
ORDER BY MIN(node.LeftID) --<--
您正在运行另一个查询吗?您不应该收到该特定错误,而是类似于“
”列“CompanyGroup.LeftID”的内容按…的顺序无效。
此查询应适用于以下情况:
SELECT node.GroupName, (COUNT(parent.GroupName) - 1) AS depth
FROM CompanyGroup AS node,
CompanyGroup AS parent
WHERE node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
;
- 我不认为这是您从发布的查询中收到的错误-您确定没有弄糟吗
无论如何,这里还有一个错误:您使用
node.LeftID
对结果进行排序,但您不能这样做。您应该会收到以下消息:
Column "node.LeftID" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
请尝试按删除订单,然后再次运行。您搜索过此错误吗?这就是您正在运行的查询吗?非常有效,谢谢。出于兴趣,你能解释一下这个问题吗?@Jim Barton,当你使用group by时,select/order子句中的每一列都必须通过聚合函数(如MAX、MIN、AVG等)来定义,或者必须包含在group by子句中。当然,我在我找到适合我的帖子中找不到解决方案,所以我提出了一个新问题
SELECT node.GroupName, (COUNT(parent.GroupName) - 1) AS depth
FROM CompanyGroup AS node,
CompanyGroup AS parent
WHERE node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName
;
Column "node.LeftID" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.